Автоматически добавлять все файлы в папку к цели с помощью CMake?

Я рассматриваю возможность переключения кроссплатформенного проекта с отдельных систем управления сборками в Visual C++, XCode и make файлах на CMake.

Одна важная функция, которая мне нужна, - это автоматическое добавление всех файлов в каталоге к цели. Хотя это легко сделать с помощью make, это нелегко сделать с помощью Visual C++ и XCode (поправьте меня, если я ошибаюсь). Возможно ли сделать это непосредственно в CMake? Как?

Ответ 1

Это возможно. Например. с file(GLOB:

cmake_minimum_required(VERSION 2.8)

file(GLOB helloworld_SRC
    "*.h"
    "*.cpp"
)

add_executable(helloworld ${helloworld_SRC})

Обратите внимание, что для этого требуется ручное повторное использование cmake, если исходный файл добавлен или удален, так как сгенерированная система сборки не знает, когда следует запросить CMake для регенерации, а выполнение при каждой сборке увеличит время сборки.

Ответ 2

Ответ Kleist, безусловно, работает, но есть важное предостережение:

Когда вы пишете Makefile вручную, вы можете сгенерировать переменную SRCS, используя функцию для выбора всех файлов .cpp и .h. Если исходный файл будет добавлен позже, повторное использование make будет включать его.

Однако CMake (с командой вроде file(GLOB ...)) будет явно генерировать список файлов и помещать его в автоматически сгенерированный Makefile. Если у вас есть новый исходный файл, вам нужно будет повторно сгенерировать Makefile путем повторного запуска cmake.

edit: Нет необходимости удалять Makefile.