根据cmake目标启用宏

时间:2013-02-17 01:44:55

标签: c++ macros cmake

我正在尝试仅在特定cmake目标使用相应的源文件时启用C-Macro。假设我有以下设置:

tests/test.cpp
src/code.cpp
include/code.hpp
CMakeList.txt

code.hpp

class MyClass
{
public:
    void normal_stuff();
#ifdef TEST
    int debug;
    void _dangerous_function()
    {
         debug++;
    }
#endif
}

code.cpp

#include "code.hpp"

MyClass::normal_stuff()
{
    // boring code
}

TEST.CPP

#include "code.hpp"

void some_test()
{
    MyClass foo;
    foo._dangerous_function();
}

CMakeList.txt

project(foo)
include_directories(include)
file(GLOB_RECURSE foo_source src/*.cpp)
file(GLOB_RECURSE test_source test/*.cpp)
add_executeable(foo ${foo_source})
add_executeable(test ${test_source} ${foo_source})

我只想在为测试目标构建 code.cpp 时设置TEST,而不是为foo目标构建。当然,在我包含 code.hpp 之前,我可以在 test.cpp 中编写“#define TEST”,但是 code.cpp 会有MyClass的不同视图比 test.cpp

有谁知道我该怎么做?我知道,我不应该这样做,但我想知道,如果我能让它运行的话。

1 个答案:

答案 0 :(得分:3)

您可以设置目标特定属性以添加此类定义:

set_target_properties(test PROPERTIES COMPILE_DEFINITIONS "TEST")

了解更多herehere