【发布时间】:2015-12-30 06:37:31
【问题描述】:
我想在自定义分配器声明中将getconf PAGESIZE 命令输出的结果作为预处理器定义以-DPAGESIZE=`getconf PAGESIZE` 的形式传递给我的程序,用于[[gnu::assume_aligned(PAGESIZE)]]。
我尝试了以下方法:
add_definitions(-DPAGESIZE=`getconf PAGESIZE`)
但它的扩展与-DPAGESIZE="\`getconf" ... PAGESIZE` 完全相同,其中... 是其他CMAKE_CXX_FLAGS* 的内容。 IE。 CMakeLists.txt 文件中的反引号转义存在问题。
如何正确地将此类参数传递给CMakeLists.txt 文件中的编译器/链接器?也许还有其他方法可以实现期望?
我也试过add_definitions(-DPAGESIZE="$$(getconf PAGESIZE)")($$ 扩展为$ by cmake),但-DPAGESIZE 和其余部分被cmake 拆分。 add_definitions("-DPAGESIZE=$$(getconf PAGESIZE)") 使 cmake 逃脱每个美元符号。
【问题讨论】:
-
这里的答案可能有用:stackoverflow.com/a/1468695/3171657
-
@usr1234567 反引号在 Bourne shell 上下文中有意义。它使 shell 运行用反引号括起来的命令,然后用它代替整个“反引号”表达式。
-
@Orient:我知道,但我怀疑这是否适用于 CMake。你可以看到反引号被转义了。所以你必须验证它是否有效。
-
终于用
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DPAGESIZE=\"`getconf PAGESIZE`\"")解决了。似乎在add_definitions()和set()的上下文中转义不同。
标签: c++ cmake compiler-flags