Ответ 1
Да, вы можете добавить параметры компилятора и компоновщика. Но есть две вещи, которые вы должны различить в CMake: первый вызов для генерации среды сборки и все последовательные вызовы для повторной генерации этой среды сборки после изменений в ваших файлах или зависимостях CMakeList.txt
.
Вот некоторые из возможностей (за исключением более сложных вариантов набора инструментов):
Добавить флаги компилятора
Исходное содержимое из кэшированной переменной
CMAKE_CXX_FLAGS
представляет собой комбинациюCMAKE_CXX_FLAGS_INIT
, установленную самим CMake во время обнаружения OS/toolchain, и всего, что установлено в переменной средыCXXFLAGS
. Таким образом, вы можете сначала позвонить:cmake -E env CXXFLAGS="-Wall" cmake ..
Позже CMake будет ожидать, что пользователь изменяет кэшированную переменную
CMAKE_CXX_FLAGS
напрямую, чтобы добавлять вещи, например. используя редактор, такой какccmake
, коммит с CMake.Вы можете легко представить свой собственный тип сборки, например
ALL_WARNINGS
. Отдельные части типа сборки добавлены:cmake -DCMAKE_CXX_FLAGS_ALL_WARNINGS:STRING="-Wall" -DCMAKE_BUILD_TYPE=ALL_WARNINGS ..
Добавить флаги компоновщика
Параметры компоновщика более или менее эквивалентны параметрам компилятора. Только то, что имена переменных CMake зависят от типа цели (EXE
, SHARED
или MODULE
).
CMAKE_EXE_LINKER_FLAGS_INIT
,CMAKE_SHARED_LINKER_FLAGS_INIT
илиCMAKE_MODULE_LINKER_FLAGS_INIT
объединяются с переменной средыLDFLAGS
доCMAKE_EXE_LINKER_FLAGS
,CMAKE_SHARED_LINKER_FLAGS
иCMAKE_MODULE_LINKER_FLAGS
.Так, например, вы можете позвонить:
cmake -E env LDFLAGS="-rpath=/home/abcd/libs/" cmake ..
Смотрите выше.
Части, относящиеся к типу сборки, добавлены:
cmake -DCMAKE_SHARED_LINKER_FLAGS_MY_RPATH:STRING="-rpath=/home/abcd/libs/" -DCMAKE_BUILD_TYPE=MY_RPATH ..
Альтернативы
Просто помните, что CMake предоставляет специальную переменную для установки флагов компилятора/компоновщика независимо от платформы. Так что вам не нужно знать конкретную опцию компилятора/компоновщика.
Вот несколько примеров:
CMAKE_CXX_STANDARD
CMAKE_POSITION_INDEPENDENT_CODE
CMAKE_BUILD_RPATH
CMAKE_INSTALL_RPATH_USE_LINK_PATH
К сожалению, для уровня предупреждения компилятора нет (пока)