传递编译器选项cmake [英] Passing compiler options cmake

查看:190
本文介绍了传递编译器选项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):


  1. 来自缓存的 CMAKE_CXX_FLAGS 变量是 CMAKE_CXX_FLAGS_INIT 在操作系统/工具链检测期间由CMake自身设置,并且在 CXXFLAGS 中进行了任何设置环境变量。因此,您可以最初调用:

  1. The initial content from the cached CMAKE_CXX_FLAGS variable is a combination of CMAKE_CXX_FLAGS_INIT set by CMake itself during OS/toolchain detection and whatever is set in the CXXFLAGS environment variable. So you can initially call:

cmake -E env CXXFLAGS="-Wall" cmake ..


  • 稍后CMake会期望用户修改 CMAKE_CXX_FLAGS 缓存的变量直接附加东西,例如通过使用 ccmake 用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 )。


    1. 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

    1. The CMAKE_EXE_LINKER_FLAGS_INIT, CMAKE_SHARED_LINKER_FLAGS_INIT or CMAKE_MODULE_LINKER_FLAGS_INIT do combine with the evironment variable LDFLAGS to CMAKE_EXE_LINKER_FLAGS, CMAKE_SHARED_LINKER_FLAGS and CMAKE_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

    不幸的是编译器的警告级别(

    Unfortunately there is none for the compiler's warning level (yet)

    • Change default value of CMAKE_CXX_FLAGS_DEBUG and friends in CMake
    • How to set warning level in CMake?

    这篇关于传递编译器选项cmake的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

    查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆