首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转义COMPILE_DEFINITIONS引号

转义COMPILE_DEFINITIONS引号
EN

Stack Overflow用户
提问于 2014-02-10 19:39:28
回答 1查看 894关注 0票数 1

目前,我正在编写一个cmake脚本来编译生成的C代码。我正在尝试生成一个Visual 10项目。代码包含几个#include语句,这些语句必须在执行之前进行预处理:

代码语言:javascript
复制
#indude INC_FILE

在开始使用CMake之前,代码是用手动维护的Visual项目编译的。我添加了一个预处理定义,以将INC_FILE替换为最终的包含头:

代码语言:javascript
复制
INC_FILE="foo.h"

对于我的新CMak脚本,我尝试将这个语句添加到COMPILE_DEFINITION变量中:

代码语言:javascript
复制
set_property(TARGET ${TARGET_NAME} APPEND_STRING PROPERTY COMPILE_DEFINITION "INC_FILE="foo.h"")

遗憾的是,这不起作用,因为引号被删除了。在生成的visual studio项目中,我在项目文件中找到了以下内容:

代码语言:javascript
复制
INC_FILE=foo.h

我试着避开引号:

  • “INC_FILE=\”foo.h\“
  • INC_FILE=\"foo.h\“
  • “INC_FILE=\”foo.h\
  • "INC_FILE="foo.h“

以上提到的可能性都不起作用。在cmake中还有什么其他的技巧可以为我的预处理器定义获得正确的引号转义吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-11 03:26:01

用cmake 2.8.12.1测试:

代码语言:javascript
复制
add_executable(foo foo.cpp)
target_compile_definitions(foo PUBLIC FOO_INCL="foo.hpp")

注1

您可以使用include选项代替文件的名称宏:

代码语言:javascript
复制
#if defined(FOO_INCLUDE_SOME_FILE)
# include "some_file.hpp"
#elif defined(FOO_INCLUDE_OTHER_FILE)
# include "other_file.hpp"
#endif

它看起来干净多了。

注2

如果您在处理特殊字符时遇到困难,请使用文件命令:

代码语言:javascript
复制
> cat some_file.hpp.in
#include "@FOO_INCLUDE_FILE@"
> cat CMakeLists.txt
set(FOO_INCLUDE_FILE "other_file.hpp")
configure_file(some_file.hpp.in ${foo_BINARY_DIR}/include/some_file.hpp @ONLY)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21686370

复制
相关文章

相似问题

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