目前我正在编写一个cmake脚本来编译生成的C代码。我正在尝试生成一个Visual Studio 10项目。该代码包含几个#include语句,必须在编译之前进行预处理:
#indude INC_FILE
在开始使用CMake之前,代码是使用手动维护的Visual Studio项目编译的。我添加了一个预处理器定义,用最终的include头替换INC_FILE:
INC_FILE="foo.h"
对于我的新CMak脚本,我尝试将此语句添加到COMPILE_DEFINITION变量中:
set_property(TARGET ${TARGET_NAME} APPEND_STRING PROPERTY COMPILE_DEFINITION "INC_FILE="foo.h"")
可悲的是,这不起作用,因为删除了引号。在生成的visual studio项目中,我在项目文件中找到了:
INC_FILE=foo.h
我试图逃避引号:
以上所有提到的可能性都不起作用。在cmake中是否有任何其他技巧可以为我的预处理器定义获取正确的引号?
答案 0 :(得分:1)
使用cmake 2.8.12.1进行测试:
add_executable(foo foo.cpp)
target_compile_definitions(foo PUBLIC FOO_INCL="foo.hpp")
您可以使用include选项代替文件名宏:
#if defined(FOO_INCLUDE_SOME_FILE)
# include "some_file.hpp"
#elif defined(FOO_INCLUDE_OTHER_FILE)
# include "other_file.hpp"
#endif
恕我直言,它看起来更干净。
如果您使用特殊字符的时间不好,请使用configure_file命令:
> 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)