将命令行实用程序的输出传递给编译器/链接器

时间:2015-12-30 06:37:31

标签: c++ cmake compiler-flags

我希望在自定义分配器声明中以getconf PAGESIZE的{​​{1}}形式将-DPAGESIZE=`getconf PAGESIZE`命令输出的结果作为预处理器定义传递给我的程序。

我尝试了以下内容:

[[gnu::assume_aligned(PAGESIZE)]]

但它完全扩展为add_definitions(-DPAGESIZE=`getconf PAGESIZE`) ,其中-DPAGESIZE="\`getconf" ... PAGESIZE`是其他...的内容。即转义CMAKE_CXX_FLAGS*文件中的反引号存在问题。

如何在CMakeLists.txt个文件中正确传递这样的参数到编译器/链接器?也许还有另一种方法可以达到预期效果吗?

我还尝试了CMakeLists.txt add_definitions(-DPAGESIZE="$$(getconf PAGESIZE)") $$扩展为$,但是cmake,其余部分被-DPAGESIZE拆分。 cmakeadd_definitions("-DPAGESIZE=$$(getconf PAGESIZE)")逃脱每一个美元符号。

1 个答案:

答案 0 :(得分:1)

根据add_definitions命令的文档,传递给此命令的预处理程序定义将附加到COMPILE_DEFINITIONS属性:

  

在-D或/ D开头的标志看起来像预处理程序定义会自动添加到当前目录的COMPILE_DEFINITIONS目录属性中。

COMPILE_DEFINITIONS属性的内容根据其documentation始终由CMake转义,因此您无法在构建命令中保留反引号的特殊含义:

  

CMake将自动为本机构建系统正确转义值

您可以手动修改CMAKE_CXX_FLAGS,就像您在评论中所示。

更好的方法是在配置阶段使用execute_process命令运行所需命令,并将其输出用于add_definitions命令。 (或使用此输出创建带configure_file的附加头文件。)