Я работаю с существующим проектом и очищаю для него CMake. Однако прямо сейчас я немного озадачен тем, как именно интегрировать параметры CMake в фактический исходный код.
Для простоты предположим, что я хочу выполнить только один фрагмент кода, скажем, cout << "print";
, внутри example.cpp
, если в CMake значение ENABLE_PRINT
установлено на ON
.
Каталог проекта будет выглядеть так:
Используя приведенный выше пример, я сделал следующее:
- В родительском проекте
CMakeLists.txt
я добавилOPTION( ENABLE_PRINT "Enable Print" ON)
- Затем в файле пример исходной папки подпроекта
Config.h
я добавил#define ENABLE_PRINT
- В
Config.h.in
, расположенном в примере подпроекта, я добавил#cmakedefine ENABLE_PRINT
- Наконец, в исходном файле
example.cpp
я обвелcout << "print";
внутри#ifdef ENABLE_PRINT
и#endif
.
После внесения этих изменений проект будет настроен и сгенерирован нормально. Однако, когда я создам программное обеспечение, оно выдаст ошибку и, по сути, скажет мне, что фрагмент кода, который я обвел #ifdef
, вообще не выполнялся; это было проигнорировано. Другими словами, описанные выше шаги ничего не сделали, кроме как «закомментировали» фрагмент кода, который я хотел сделать зависимым от ENABLE_PRINT.
Итак, как мне заставить это работать?
../vlApplication/libvlapp.a(vlMPIApplication.cpp.o): In function 'VLAPP::MPIApplication::draw()': vlMPIApplication.cpp:(.text+0x3043): undefined reference to 'VLUTIL::Timers::MPITimerManager::syncMultiTimers()
- person assignment_operator   schedule 10.07.2014#ifdef
- person assignment_operator   schedule 10.07.2014