Получите CMake для выполнения цели в проекте до создания библиотеки

Я использую CMake для создания моего проекта на С++, и он имеет несколько исполняемых файлов и библиотеку (все части одного и того же проекта). Все работает нормально, однако один из моих исполняемых файлов является генератором кода, который создает некоторые из классов библиотеки. У меня есть все поколение, но не могу понять, как назвать этот исполняемый файл (codegen) непосредственно перед созданием библиотеки. Я нахожусь в среде Linux. Надеюсь, кто-то может ответить на этот вопрос.

Ответы

Ответ 1

В CMakeLists.txt:

Сначала определите свой исполняемый файл:

add_executable(marks-code-generator gen.cpp)

Затем определите пользовательскую команду для генерации источника:

add_custom_command(OUTPUT generated.cpp generated.hpp
                   COMMAND marks-code-generator ARGS args here maybe
                   MAIN_DEPENDENCY input-file.in
                   DEPENDS marks-code-generator
                   COMMENT here we go!
                   VERBATIM)

Опция VERBATIM гарантирует, что экранирование конкретной платформы выполняется правильно. COMMENT будет распечатан, так как make выполняется, давая что-то вроде [ 66%] here we go!.

Наконец, назовите ваш сгенерированный источник в исходном списке для вашей реальной программы:

add_executable(some-program generated.cpp generated.hpp non-generated.cpp foo.cpp)