[英]Pass output of command line utility to compiler/linker
我想将getconf PAGESIZE
命令输出的结果作为预处理器定义以-DPAGESIZE=`getconf PAGESIZE`
形式-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)")
使cmake
转义每个美元符号。
根据add_definitions命令的文档,传递给此命令的预处理器定义被附加到COMPILE_DEFINITIONS
属性:
以 -D 或 /D 开头的看起来像预处理器定义的标志会自动添加到当前目录的 COMPILE_DEFINITIONS 目录属性中。
根据其文档, COMPILE_DEFINITIONS
属性的内容总是被 CMake 转义,因此您不能在构建命令中保留反引号的特殊含义:
CMake 将自动为本机构建系统正确转义该值
您可以手动修改 CMAKE_CXX_FLAGS,如您在评论中所示。
更好的方法是在配置阶段使用execute_process
命令运行需要的命令,并将其输出用于add_definitions
命令。 (或使用此输出通过configure_file
创建额外的头文件)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.