Автоматически добавлять все файлы в папку к цели с помощью 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.