我希望在自定义分配器声明中以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
拆分。 cmake
让add_definitions("-DPAGESIZE=$$(getconf PAGESIZE)")
逃脱每一个美元符号。
答案 0 :(得分:1)
根据add_definitions命令的文档,传递给此命令的预处理程序定义将附加到COMPILE_DEFINITIONS
属性:
在-D或/ D开头的标志看起来像预处理程序定义会自动添加到当前目录的COMPILE_DEFINITIONS目录属性中。
COMPILE_DEFINITIONS
属性的内容根据其documentation始终由CMake转义,因此您无法在构建命令中保留反引号的特殊含义:
CMake将自动为本机构建系统正确转义值
您可以手动修改CMAKE_CXX_FLAGS,就像您在评论中所示。
更好的方法是在配置阶段使用execute_process
命令运行所需命令,并将其输出用于add_definitions
命令。 (或使用此输出创建带configure_file
的附加头文件。)