传递编译器选项cmake [英] Passing compiler options cmake
问题描述
我知道如何使用cmake命令传递编译器选项
I know how to pass compiler options using the cmake command
set(CMAKE_CXX_FLAGS "-Wall -Wno-dev -Wl,-rpath=/home/abcd/libs/")
还有什么方法可以通过命令行中的选项,它将覆盖CMakeList.txt选项,例如-
Is there also any way to pass the options from the command line, that will override the CMakeList.txt options , something like -
cmake -Wl,-rpath=/home/abcd/newlibs/ path/to/CMakeLists.txt
或
cmake -D CMAKE_CXX_FLAGS="-Wno-dev -Wl,-rpath=/home/abcd/libs/" path/to/CMakeLists.txt
我的主要问题是我想知道如何添加标志以及如何从命令中覆盖现有的编译器标志
My main problem is that I want to know how to append flags and how to override existing compiler flags from the command line.
推荐答案
是的,您可以追加编译器和链接器选项。但是在CMake中,您必须区分两件事:第一次调用以生成构建环境,而在更改 CMakeList.txt
之后,所有连续调用以重新生成该构建环境。文件或依赖项。
Yes, you can append compiler and linker options. But there are two things you have to differentiate in CMake: first call to generate the build environment and all consecutive calls for re-generating that build environment after changes to your CMakeList.txt
files or dependencies.
这里有一些可能性(不包括更复杂的工具链变体):
Here are some of the possibilities (excluding the more complex toolchain variants):
-
来自缓存的
CMAKE_CXX_FLAGS
变量是CMAKE_CXX_FLAGS_INIT
在操作系统/工具链检测期间由CMake自身设置,并且在CXXFLAGS
中进行了任何设置环境变量。因此,您可以最初调用:
The initial content from the cached
CMAKE_CXX_FLAGS
variable is a combination ofCMAKE_CXX_FLAGS_INIT
set by CMake itself during OS/toolchain detection and whatever is set in theCXXFLAGS
environment variable. So you can initially call:
cmake -E env CXXFLAGS="-Wall" cmake ..
稍后CMake会期望用户修改 CMAKE_CXX_FLAGS
缓存的变量直接附加东西,例如通过使用 ccmake $ c $这样的编辑器c>
用CMake提交。
Later CMake would expect that the user modifies the CMAKE_CXX_FLAGS
cached variable directly to append things e.g. by using an editor like ccmake
commit with CMake.
您可以轻松介绍自己的构建类型,例如 ALL_WARNINGS
。附加了特定于构建类型的部分:
You can easily introduce your own build type like ALL_WARNINGS
. The build type specific parts are appended:
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
。
The
CMAKE_EXE_LINKER_FLAGS_INIT
,CMAKE_SHARED_LINKER_FLAGS_INIT
orCMAKE_MODULE_LINKER_FLAGS_INIT
do combine with the evironment variableLDFLAGS
toCMAKE_EXE_LINKER_FLAGS
,CMAKE_SHARED_LINKER_FLAGS
andCMAKE_MODULE_LINKER_FLAGS
.
因此您可以例如致电:
cmake -E env LDFLAGS="-rpath=/home/abcd/libs/" cmake ..
请参见上文。
See above.
附加了特定于构建类型的部分:
Build type specific parts are appended:
cmake -DCMAKE_SHARED_LINKER_FLAGS_MY_RPATH:STRING="-rpath=/home/abcd/libs/" -DCMAKE_BUILD_TYPE=MY_RPATH ..
替代
请注意,CMake确实提供了特殊变量来以独立于平台的方式设置编译器/链接器标志。因此,您无需了解特定的编译器/链接器选项。
Alternatives
Just be aware that CMake does provide special variable to set complier/linker flags in a platform independent way. So you don't need to know the specific compiler/linker option.
以下是一些示例:
-
CMAKE_CXX_STANDARD
-
CMAKE_POSITION_INDEPENDENT_CODE
-
CMAKE_BUILD_RPATH
-
CMAKE_INSTALL_RPATH_USE_LINK_PATH
CMAKE_CXX_STANDARD
CMAKE_POSITION_INDEPENDENT_CODE
CMAKE_BUILD_RPATH
CMAKE_INSTALL_RPATH_USE_LINK_PATH
不幸的是编译器的警告级别(还)
Unfortunately there is none for the compiler's warning level (yet)
- 更改CMake_CXX_FLAGS_DEBUG和CMake中的朋友的默认值
- < a href = https://stackoverflow.com/questions/2368811/how-to-set-warning-level-in-cmake>如何在CMake中设置警告级别?
- Change default value of CMAKE_CXX_FLAGS_DEBUG and friends in CMake
- How to set warning level in CMake?
这篇关于传递编译器选项cmake的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!