gpt4 book ai didi

cmake - 在 CMake 命令行中传递编译器选项

转载 作者:行者123 更新时间:2023-11-30 16:25:07 28 4
gpt4 key购买 nike

我知道如何使用 cmake 命令传递编译器选项:

set(CMAKE_CXX_FLAGS "-Wall -Wno-dev -Wl,-rpath=/home/abcd/libs/")

是否还有一种方法可以从命令行传递选项来覆盖 CMakeLists.txt选项?像这样的东西:

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

我的主要问题是我想知道如何附加标志以及如何从命令行覆盖现有的编译器标志。

最佳答案

是的,您可以附加编译器和链接器选项。但在 CMake 中您必须区分两件事:生成构​​建环境的第一次调用以及在更改 CMakeLists.txt 文件或依赖项后重新生成该构建环境的所有连续调用。

以下是一些可能性(不包括更复杂的 toolchain 变体):

附加编译器标志

  1. 缓存的初始内容 CMAKE_CXX_FLAGS变量是 CMAKE_CXX_FLAGS_INIT 的组合在操作系统/工具链检测期间由 CMake 本身设置,以及在 CXXFLAGS 环境变量中设置的内容。所以你最初可以调用:

     cmake -E env CXXFLAGS="-Wall" cmake ..
  2. 稍后,CMake 会期望用户直接修改 CMAKE_CXX_FLAGS 缓存变量来附加内容,例如,使用 ccmake 之类的编辑器。使用 CMake 提交。

  3. 您可以轻松引入自己的构建类型,例如 ALL_WARNINGS。附加构建类型特定部分:

      cmake -DCMAKE_CXX_FLAGS_ALL_WARNINGS:STRING="-Wall" -DCMAKE_BUILD_TYPE=ALL_WARNINGS ..

附加链接器标志

链接器选项或多或少等同于编译器选项。只是 CMake 的变量名称取决于目标类型(EXESHAREDMODULE)。

  1. CMAKE_EXE_LINKER_FLAGS_INIT , CMAKE_SHARED_LINKER_FLAGS_INITCMAKE_MODULE_LINKER_FLAGS_INIT与环境变量LDFLAGS结合到CMAKE_EXE_LINKER_FLAGS , CMAKE_SHARED_LINKER_FLAGSCMAKE_MODULE_LINKER_FLAGS .

    所以你可以例如调用:

     cmake -E env LDFLAGS="-rpath=/home/abcd/libs/" cmake ..
  2. 见上文。

  3. 附加了构建类型特定的部分:

     cmake -DCMAKE_SHARED_LINKER_FLAGS_MY_RPATH:STRING="-rpath=/home/abcd/libs/" -DCMAKE_BUILD_TYPE=MY_RPATH ..

替代方案

请注意,CMake 确实提供了一个特殊变量来以独立于平台的方式设置编译器/链接器标志。因此您不需要知道特定的编译器/链接器选项。

以下是一些示例:

不幸的是,没有编译器的警告级别( yet )

引用文献

关于cmake - 在 CMake 命令行中传递编译器选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53510065/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com