为什么宏不是由cmake定义的?

时间:2014-11-25 17:14:17

标签: c++ cmake

我的cmake文件中有以下内容:

#...
project(${EXECUTABLE_NAME})

set(CMAKE_CXX_FLAGS "-g -std=gnu++11")

option(DEBUG "Displays values and images at different steps" OFF)
if (DEBUG)
    set(CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS} " -DDEBUGGING ")
    message("DEBUG = ON")
endif()
#...

我的代码中有这样的内容:

#ifdef DEBUGGING
    if (flgIn == DISPLAY)
        std::cout << val1 << " " << val2 << " " << val3 << std::endl;
#endif

当我这样做时

$ cmake -DDEBUG=OFF ..
$ make

工作正常。但是当我设置选项时

$ cmake -DDEBUG=ON ..
$ make

我收到以下错误:

c++: fatal error: no input files
compilation terminated.
/bin/sh: 1: -DDEBUGGING: not found
make[2]: *** [CMakeFiles/prj.dir/src/cpp/file.cpp.o] Error 127

我不明白我错了什么。有什么建议吗?

1 个答案:

答案 0 :(得分:4)

与评论一样,使用target_compile_definitions

http://www.cmake.org/cmake/help/v3.0/command/target_compile_definitions.html

但是,对于遇到的问题,CMAKE_CXX_FLAGS是一个字符串,而不是一个列表。您可以通过将其作为字符串处理来向其添加内容:

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -DDEBUGGING ")