В настоящее время я пытаюсь использовать cmake
для моего проекта. Структура этого довольно тривиально, состоящий из основной папки и «библиотеки» вложенной также содержащие заголовки и исходные файлы:Правильная настройка подкаталогов с cmake
./ sourceA.cpp ...
./lib/ sourceB.cpp headerB.cpp ...
Я хочу, чтобы позволить пользователю определить некоторые константы, которые затем должны быть использованы препроцессором заменить некоторые заполнители, такие как: char data[DIMENSION]
In в главном каталоге я использую следующий CMakeLists.txt, чтобы запросить значение и установить его:
...
set(DATASET_DIMENSION "4" CACHE STRING "The dimensions of the dataset used.")
set_property(
GLOBAL
PROPERTY COMPILE_DEFINITIONS DIMENSION=${DATASET_DIMENSION}
APPEND
)
add_subdirectory(lib)
...
в подкаталоге, в CMakeLists.t xt в основном добавляет исходные файлы и вызовы add_library(lib ${lib_SOURCES})
.
Проблема: Если я исполняю make
, компилятор жалуется, что DIMENSION
не был заменен:
.../lib/someheader.h:7:19:error: ‘DIMENSION’ undeclared here (not in a function)
Что не так с моей конфигурации? Я пытался следовать примеру CMake, где они указывают (курсив мой):
CMake при выполнении в каталоге верхнего уровня будет обрабатывать файл CMakeLists.txt, а затем спуститься в перечисленных подкаталогов. Переменные, включают в себя пути, пути библиотек и т. Д. унаследованы.
Это похоже на работу сейчас. Спасибо! – Patrick