2015-12-30 73 views
0

我想通过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虽则逃避每一美元的迹象。

+1

这里的答案可能是有用的:http://stackoverflow.com/a/1468695/3171657 – Turn

+0

为什么不使用? – usr1234567

+0

@ usr1234567在Bourne shell环境中反引用是有意义的。反引号,然后取代它,而不是整个“backticked”表达 – Orient

回答

1

根据用于add_definitions命令文档,预处理器定义,传递到该命令,附加到COMPILE_DEFINITIONS属性:

标志开始在-D或/ d,看起来像预处理器定义被自动添加到COMPILE_DEFINITIONS目录属性为当前目录。

而且COMPILE_DEFINITIONS财产的内容,根据其documentation总是由CMake的逃脱,所以你不能保持反引号的特殊含义在构建命令:

的CMake将自动正确逃生的价值为本机构建系统

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

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