TL; DR Я в основном хочу модульное решение этот вопрос . Не только одно решение со всем в нем, но и решение для каждого исполняемого файла отдельно.
В моем вопросе здесь Я хотел знать, как мне разбить мой CMakeLists.txt по разным папкам. Некоторые папки содержат код, который будет являться статической библиотекой, а часть кода будет исполняемым файлом или динамической библиотекой, основанной на этих статических библиотеках.
Структура папок выглядит следующим образом:
/path/to/base/
CMakeLists.txt
app1/
<src files for app1>
CMakeLists.txt
app2/
<src files for app2>
CMakeLists.txt
lib/
<src files for lib>
CMakeLists.txt
Если я использую CMakeLists.txt
в родительской папке для всех моих библиотек и исполняемых файлов и включаю все каталоги, у меня возникает проблема, заключающаяся в том, что при создании проектов / решений VS, которые содержатся в моих проектах для каждой цели все проекты - не только те, которые необходимы для моей намеченной цели.
Содержимое CMakeLists.txt
в базовой папке:
cmake_minimum_required(VERSION 3.1)
add_subdirectory(lib)
add_subdirectory(app1)
add_subdirectory(app2)
и CMakeLists.txt
в папке app1 (app2 эквивалентно)
cmake_minimum_required(VERSION 3.1)
project(app1)
add_executable(app1 <src of app1>)
target_link_libraries(app1 lib)
и CMakeLists.txt
из lib:
add_library(lib <src of lib>)
Если я запускаю cmake на CMakeLists.txt
из базы, решение содержит все проекты. И даже если я открою только один из проектов; это также содержит все. VS проект app1 также строит app2 - чего я не хочу.
Если я запускаю cmake только на CMakeLists.txt
в app1, я получаю решение, которое не содержит app2, но и не содержит lib, потому что это упоминается только для ссылок внутри файла cmake, а не как цель ( это в базовом файле)