gpt4 book ai didi

cmake - 传递编译器选项 cmake

转载 作者:行者123 更新时间:2023-12-03 09:24:21 27 4
gpt4 key购买 nike

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

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

还有什么方法可以从命令行传递选项,这将覆盖 CMakeList.txt options ,例如 -
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 中有两件事你必须区分:首先调用以生成构建环境,以及在更改 CMakeList.txt 后重新生成构建环境的所有连续调用。文件或依赖项。

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

附加编译器标志

  • 缓存中的初始内容 CMAKE_CXX_FLAGS 变量是 CMAKE_CXX_FLAGS_INIT 的组合在操作系统/工具链检测期间由 CMake 本身设置,以及在 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 的变量名称取决于目标类型( EXESHAREDMODULE )。
  • 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

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

    引用
  • Change default value of CMAKE_CXX_FLAGS_DEBUG and friends in CMake
  • How to set warning level in CMake?
  • 关于cmake - 传递编译器选项 cmake,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44284275/

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