如何使用带有 Ninja 生成器的 CMake 将修饰符标志传递给存档文件(ar)

Posted

技术标签:

【中文标题】如何使用带有 Ninja 生成器的 CMake 将修饰符标志传递给存档文件(ar)【英文标题】:How do I pass modifier flags to archive-file (ar) using CMake with a Ninja generator 【发布时间】:2021-04-14 14:31:44 【问题描述】:

我正在使用带有 Ninja 生成器的 CMake 来生成 QNX 库,它正在创建一个 rules.ninja,其规则如下所示:

rule CXX_STATIC_LIBRARY_LINKER__<target>
  command = $PRE_LINK && <path>/cmake -E rm -f $TARGET_FILE && <qnx-path>/aarch64-unknown-nto-qnx7.0.0-ar qc $TARGET_FILE $LINK_FLAGS $in && <path>/aarch64-unknown-nto-qnx7.0.0-ranlib $TARGET_FILE && $POST_BUILD
  description = Linking CXX static library $TARGET_FILE
  restat = $RESTAT

并且我想将 D 标志添加到 ar 修饰符,以便获得确定性构建。

像这样:

...-qnx7.0.0-ar qcD $TARGET_FILE ...

有人知道我需要修改哪个 CMake 变量吗?

【问题讨论】:

【参考方案1】:

好的,我设法弄明白了。要使用的变量是CMAKE_"LANG"_ARCHIVE_CREATECMAKE_"LANG"_ARCHIVE_APPEND

像这样:

set(CMAKE_CXX_ARCHIVE_CREATE "<CMAKE_AR> qcD <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_CXX_ARCHIVE_APPEND "<CMAKE_AR> qD <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_ARCHIVE_CREATE "<CMAKE_AR> qcD <TARGET> <LINK_FLAGS> <OBJECTS>")
set(CMAKE_C_ARCHIVE_APPEND "<CMAKE_AR> qD <TARGET> <LINK_FLAGS> <OBJECTS>")

【讨论】:

以上是关于如何使用带有 Ninja 生成器的 CMake 将修饰符标志传递给存档文件(ar)的主要内容,如果未能解决你的问题,请参考以下文章

CMake / Ninja:当内容未知时递归“清理”输出目录......?

CMake、Ninja 和 Visual Studio 2019 重建一切

C++学习(四四二)cmake ninja build.ninja rules.ninja

使用 CMake、Clang 和 Ninja 在 Windows 上构建 c++ 项目

Ninja 构建中的 CMake 命令行参数

在 macOS 上使用 Ninja 进行 CMake GUI