вторник, 25 июня 2019 г.

Команды go: go build, компиляция пакетов и зависимостей

Использование:

go build [-o output] [-i] [build flags] [packages]

build компилирует пакеты, названные путями импорта, вместе с их зависимостями, но не устанавливает результаты.

Если аргументы для build представляют собой список файлов .go, build обрабатывает их как список исходных файлов, указывающих один пакет.

При компиляции единичного основного пакета (main package) build записывает полученный исполняемый файл в выходной файл, названный в честь первого исходного файла ("go build ed.go rx.go" записывает "ed" или "ed.exe") или в каталог исходного кода ("go build unix/sam" записывает "sam" или "sam.exe"). Суффикс ".exe" добавляется при записи исполняемого файла Windows.

При компиляции нескольких пакетов или одного неосновного пакета, build компилирует пакеты, но отбрасывает полученный объект, служа только для проверки возможности сборки пакетов.

При компиляции пакетов build игнорирует файлы, заканчивающиеся на "_test.go".

Флаг -o, разрешен только при компиляции одного пакета, он заставляет build записывать полученный исполняемый файл или объект в именованный выходной файл вместо поведения по умолчанию, описанного выше.

Флаг -i устанавливает пакеты, которые являются зависимостями от цели.

Флаги сборки (build flags) используются командами build, clean, get, install, list, run и test:

-a
    заставляет пересобрать (rebuild) пакеты, 
    которые и так уже имеют последнюю версию (up-to-date).
-n
    печатает команды, но не запускает их.
-p n
    количество программ, таких как команды сборки или
    тестирования бинарных файлов, которые можно запускать параллельно.
    По умолчанию равно количеству доступных ядер процессоров.
-race
    включить обнаружение гонки данных.
    Поддерживается только в linux/amd64, freebsd/amd64, darwin/amd64 и windows/amd64.
-msan
    включить взаимодействие с очистителем памяти.
    Поддерживается только на linux/amd64, linux/arm64
    и только с Clang/LLVM в качестве C компилятора хоста.
-v
    печатать имена пакетов по мере их компиляции.
-work
    распечатать имя временного рабочего каталога и
    не удалять его при выходе.
-x
    распечатать команды.
-asmflags '[pattern =] arg list'
    аргументы для передачи при каждом вызове go tool asm.
-buildmode mode
    режим сборки для использования. Смотрите 'go help buildmode' для более подробной информации.
-compiler name
    имя используемого компилятора, как в runtime.Compiler (gccgo или gc).
-gccgoflags '[pattern =] arg list'
    аргументы для передачи при каждом вызове компилятора/компоновщика gccgo (gccgo compiler/linker).
-gcflags '[pattern =] arg list'
    аргументы для передачи при каждом вызове go tool compile.
-installsuffix suffix
    суффикс для использования в имени каталога установки пакета,
    чтобы сохранить вывод отдельно от сборок по умолчанию.
    При использовании флага -race суффикс установки автоматически устанавливается равным race
    или, если задано явно, к нему добавлен _race. Аналогично для -msan
    флага. Использование параметра -buildmode, который требует нестандартных флагов компиляции
    имеет аналогичный эффект.
-ldflags '[pattern =] arg list'
    аргументы для передачи при каждом вызове go tool link.
-linkshared
    ссылка на общие библиотеки, ранее созданные с
    -buildmode=shared.
-mod mode
    Режим (mode) загрузки модуля для использования: readonly или vendor.
    См. 'go help modules' для получения дополнительной информации.
-pkgdir dir
    установить и загрузить все пакеты из dir вместо обычных мест.
    Например, при сборке с нестандартной конфигурацией,
    используйте -pkgdir для хранения сгенерированных пакетов в отдельном месте.
-tags 'tag list'
    разделенный пробелами список тегов сборки, которые необходимо учитывать во время
    сборки. Для получения дополнительной информации о тегах сборки см. Описание
    ограничения сборки в документации для пакета go/build.
-toolexec 'cmd args'
    программа, используемая для вызова таких программ, как vet и asm.
    Например, вместо запуска asm будет запущена команда go
    'cmd args /path/to/asm <аргументы для asm>'.

Флаги -asmflags, -gccgoflags, -gcflags и -ldflags принимают разделенный пробелами список аргументов для передачи базовому инструменту во время сборки. Чтобы вставить пробелы в элемент списка, заключите его в одинарные или двойные кавычки. Списку аргументов может предшествовать паттерн пакета и знак равенства, который ограничивает использование этого списка аргументов до построения пакетов, соответствующих этому паттерну (описание паттернов пакетов см. в «go help packages»). Без паттерна список аргументов применяется только к пакетам, указанным в командной строке. Флаги могут повторяться с разными паттернами, чтобы указывать разные аргументы для разных наборов пакетов. Если пакет соответствует паттернам, указанным в нескольких флагах, побеждает последнее совпадение в командной строке. Например, 'go build -gcflags=-S fmt' печатает разборку (disassembly) только для пакета fmt, а 'go build -gcflags=all=-S fmt' печатает разборку (disassembly) для fmt и всех его зависимостей.

Подробнее об указании пакетов см. в разделе 'go help packages'. Чтобы узнать больше о том, где установлены пакеты и бинарные файлы, запустите 'go help gopath'. Чтобы узнать больше о вызовах между Go и C/C++, запустите 'go help c'.

Примечание: build придерживается определенных соглашений, таких как те, которые описаны в 'go help gopath'. Однако не все проекты могут следовать этим правилам. Установки, которые имеют свои собственные соглашения или используют отдельную систему сборки программного обеспечения, могут использовать вызовы более низкого уровня, такие как 'go tool compile' и 'go tool link', чтобы избежать некоторых накладных расходов и проектных решений инструмента сборки.

Смотрите также: go install, go get, go clean.


Читайте также:


1 комментарий:

sexyGirlLatvia комментирует...

Вы самые четкие

Отправить комментарий