繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM