Лучше скрыть все детали настройки переменной SRCS
в CMake макросе . Затем макрос можно вызывать во всех файлах списка CMake проекта для добавления источников.
В CMakeLists.txt
в корневой папке проекта добавьте следующее определение макроса:
macro (add_sources)
file (RELATIVE_PATH _relPath "${PROJECT_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}")
foreach (_src ${ARGN})
if (_relPath)
list (APPEND SRCS "${_relPath}/${_src}")
else()
list (APPEND SRCS "${_src}")
endif()
endforeach()
if (_relPath)
# propagate SRCS to parent directory
set (SRCS ${SRCS} PARENT_SCOPE)
endif()
endmacro()
add_sources(main.cpp)
add_subdirectory(dir1)
add_subdirectory(dir2)
message(STATUS "${SRCS}")
Макрос сначала вычисляет путь исходного файла относительно корня проекта для каждого аргумента. Если макрос вызывается из подкаталога проекта, новое значение переменной SRCS необходимо распространить в родительскую папку с помощью параметра PARENT_SCOPE .
В подкаталогах вы можете просто добавить вызов макроса, например, в dir1/CMakeLists.txt
добавить:
add_sources(file1.cpp file2.cpp)
А в dir2/CMakeLists.txt
добавить:
add_sources(file3.cpp file4.cpp)