Добрый день.
В корне проекта есть каталог config. В нем есть файл config.h.in. Это шаблон конфигурационного файла на основе которого при сборке через механизм cmake configure_file() генерируется файл config.h который будет подключаться в исходниках целей через директиву
// Здесь не указываются пути, только имя файла
#include "config.h"
Также в каталоге config есть файл CMakeLists.txt следующего содержания (config.h.in добавляется к цели для того, чтобы отображаться в дереве проекта в IDE):
add_library(config config.h.in)
set_target_properties(config PROPERTIES LINKER_LANGUAGE CXX)
# или же можно установить свойства конкретного файла (с тем же эффектом)
# set_source_files_properties(config.h.in PROPERTIES LANGUAGE CXX HEADER_FILE_ONLY ON)
set(CMAKE_INCLUDE_CURRENT_DIR_IN_INTERFACE ON)
configure_file(config.h.in config.h)
CMake Error: Cannot determine link language for target "config".
CMake Error: CMake can not determine linker language for target: config
Данный файл подключается в корневом файле CMakeLists.txt через команду
add_subdirectory("config")
add_executable(program main.cpp)
target_link_libraries(program library0 library1 config)
При данной конфигурации сборка работает.
Вопрос: правильная ли это архитектура? Или добавить путь к конфигурационному файлу удобнее иначе? Например через команду cmake add_custom_target (через нее у меня не получилось, но возможно я делал это как-то не корректно)?