1

対応するソース ファイルが特定の cmake ターゲットによって使用されている場合にのみ、C マクロを有効にしようとしています。次の設定があるとします。

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

コード.hpp

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

コード.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 ターゲット用にビルドされている場合にのみ TEST を設定したいのですが、foo ターゲット用には設定したくありません。もちろん、 code.hppをインクルードする前にtest.cppに「#define TEST」と書くこともできますが、そうすればcode.cppはtest.cppとは異なる MyClass のビューを持つことになります。

どうすればそれができるか考えている人はいますか?これを行うべきではないことはわかっていますが、実行できるかどうかを知りたいです。

4

1 に答える 1

4

このような定義を追加するために、ターゲット固有のプロパティを設定できます。

set_target_properties(test PROPERTIES COMPILE_DEFINITIONS "TEST")

ここここでもっと読む

于 2013-02-17T02:02:49.907 に答える