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


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

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

Не стесняйтесь добавлять любую другую вещь, о которой я должен знать раньше собираюсь изучить CMake, учитывая, что в настоящее время проект среднего размера (8 библиотек, 2 исполняемых файла, 8 тестовых проектов и это зависит от около 8 внешних библиотек).

2 116

2 ответа:

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

cmake_minimum_required(VERSION 2.8)

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

add_executable(helloworld ${helloworld_SRC})

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

ответ Клейста, конечно, работает, но есть важный нюанс:

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

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

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