首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用cmake add_definitions的文件路径

使用cmake add_definitions的文件路径
EN

Stack Overflow用户
提问于 2015-10-05 11:52:00
回答 6查看 8.5K关注 0票数 7

我正在尝试替换硬编码的预处理器。

代码语言:javascript
复制
#define MY_FILE_PATH "/usr/local/myfile"

在cmake中使用add_definitions

代码语言:javascript
复制
add_definitions(-DMY_FILE_PATH=${MY_FILE_PATH})

在调用cmake时,我使用-DMY_FILE_PATH=/usr/tmp/myfile,但得到了所有错误,例如,“/”令牌之前的预期主表达式和tmp未找到等等。在我的场景中是否可以使用add_definitions,还是应该尝试configure_file。add_definitions只支持整数值吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2015-10-05 11:57:55

原始代码将宏定义为字符串文本,但CMake代码将其定义为一系列标记。更确切地说,你把引号掉了。

在调用CMake时将它们添加回:

代码语言:javascript
复制
-DMY_FILE_PATH="/usr/tmp/myfile"

(您可能必须正确地将它们转义到shell中)。

票数 0
EN

Stack Overflow用户

发布于 2016-08-01 16:56:14

这里和谷歌搜索互联网的答案对我都没有用(Windows上的CMake 3.4.1 )。我终于找到了解决办法,希望这能帮上忙:

诀窍是引用您想要用add_definitions添加的每个定义的全部内容,而不仅仅是它的值部分,并转义到shell的内部引号。请记住,每个定义应该包含一个单独的字符串。如下所示:

代码语言:javascript
复制
add_definitions( "-D_SOME_DEFINE=\"Some value with spaces, etc\"" "-D DEF1=\"Another string\"")

答案不仅限于路径,而且适用于您希望作为预处理器指令提供的任何通用字符串。这是我能够提供包含空格字符的字符串的唯一方法。

票数 7
EN

Stack Overflow用户

发布于 2020-12-07 07:46:02

不要使用add_definitions;在CMake 3.12中不推荐使用它。使用target_compile_definitions代替。这段代码可以追溯到CMake 3.0。

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.0)
project(example)

set(MY_FILE_PATH "/usr/local/myfile")

add_executable(main main.cpp)
target_compile_definitions(main PRIVATE "MY_FILE_PATH=\"${MY_FILE_PATH}\"")

如果main.cpp包含:

代码语言:javascript
复制
#include <cstdio>

int main () { std::puts(MY_FILE_PATH); }

然后我们得到以下交互作用:

代码语言:javascript
复制
dev@host:~/example$ cmake -S . -B build
...
-- Configuring done
-- Generating done
-- Build files have been written to: /home/dev/example/build
dev@host:~/example$ cmake --build build/
...
[100%] Built target main
dev@host:~/example$ ./build/main
/usr/local/myfile

虽然总是倾向于使用目标属性,但如果必须绝对使用目录属性,则替换add_definitions的函数是add_compile_definitions。你可以这样称呼它:

代码语言:javascript
复制
add_compile_definitions("MY_FILE_PATH=\"${MY_FILE_PATH}\"")
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32947974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档