Как я могу сопоставить все подкаталоги автоматически с помощью cmake - PullRequest
0 голосов
/ 23 октября 2018

При условии, что мой проект выглядит следующим образом:

|--main.cpp
  |-A--a1.cpp
  |   |-a2.cpp
  |
  |-B--b1.cpp
      |-b2.cpp
|--CMakeLists.txt

Как я могу добавить все *.cpp (например, main.cpp, A/a1.cpp, A/a2.cpp, B/b1.cpp, B/b2.cpp)в переменную cmake SRC?Я надеюсь, что мне может понадобиться только один CMakeLists.txt.Кстати, что, если мне нужно исключить определенные .cpp s?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Как упомянул Александр, вы можете использовать файл (GLOB_RECURSE myVar myRegex), чтобы получить все файлы, соответствующие myRegex, в myVar в виде списка.Чтобы исключить некоторые из них, вы можете поиграть с myRegex или отфильтровать список с помощью list(FILTER myVar <INCLUDE|EXCLUDE> REGEX <regular_expression>)

Но учтите, что добавление еще одного файла .cpp в ваш проект не будет автоматически добавлено к вашей цели при перестройке.,Вам нужно будет явно перенастроить свой проект для внесения изменений.Начиная с CMake 3.12, есть также опция CONFIGURE_DEPENDS для файлов GLOBE и GLOBE_RECURSE, которая сделает обновление для вас.

Вот примечание из документации CMake:

Примечание Мы не рекомендуем использовать GLOB для сбора списка исходных файлов из вашего исходного дерева.Если файл CMakeLists.txt не изменяется при добавлении или удалении источника, сгенерированная система сборки не может знать, когда попросить CMake сгенерировать заново.Флаг CONFIGURE_DEPENDS может работать не надежно на всех генераторах, или, если в будущем будет добавлен новый генератор, который не сможет его поддерживать, проекты, использующие его, будут заблокированы.Даже если CONFIGURE_DEPENDS работает надежно, проверка каждой перестройки по-прежнему требует затрат.

0 голосов
/ 23 октября 2018

Это то, что вы хотите:

file(GLOB_RECURSE SRC *.cpp)

Для получения дополнительной информации: https://cmake.org/cmake/help/v3.0/command/file.html

Для исключения вы можете написать функцию.

Примечание: Но я не рекомендую использовать «glob».Лучше использовать «set» со списком файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...