Включение исходных файлов в Cmake

183
14 июля 2018, 09:10

не так давно пользуюсь CMake и вот наткнулся на такую, нельзя сказать проблему, а скорее не понятную мне вещь, пример:

...   
set (NETWORK_PATH Network)
set (NETWORK ${NETWORK_PATH}/IServer.h
             ${NETWORK_PATH}/Server.h
             ${NETWORK_PATH}/Server.cpp
             ${NETWORK_PATH}/Client.h
             ${NETWORK_PATH}/Client.cpp)
...
set (SOURCES main.cpp ${DATA_OBJECTS} ${EXCEPTIONS} ${NETWORK} ${UTILS} ${SYSTEM_CHECKING})
...
add_executable(${PROJECT_NAME} ${SOURCES})
...

Как видно из этого примера я разбиваю в Cmake все на каталоги потом собираю все в переменной SOURCES и уже после этого отдаю на линковку к исполняемому файлу. Вопрос заключается в следующем... Нельзя ли как-то автоматически включать файлы ну к примеру там скан пакетов как в Java с использованием Maven? Потому что такое подход, который сейчас использую я, немного утомляет... приходится каждый файл удалять и добавлть в ручную...

Answer 1

Для начала: зачем вы в одной папке держите хэдэры и соурсные файлы? Это лучше разделять. Когда у вас все хэдэры в отдельной папке include, то в CMakeLists.txt их можно включить с помощью:

include_directories(include)

Далее, когда у вас все соурсные файлы в отдельной папке, к примеру sources, то делаем так:

set(GLOB SRC_SRC "sources/*.cpp")

Поясню: сдесь в SRC_SRC включаются все файлы с расширением .cpp которые есть в папке sources. Далее просто делаете:

add_executable(${PROJECT_NAME} ${SRC_SRC})

Как-то так. Но вообще лучше делать библиотеки, конечно.

READ ALSO
Забрать move семантикой строку из stringstream

Забрать move семантикой строку из stringstream

Чтобы сформировать строку использую std::stringstream (набиваю содержимым оператором <<), затем выбираю полученную строку методом std::stringstream::str:

183
Кастомизация консольного приложения в Linux

Кастомизация консольного приложения в Linux

Пишу консольное приложение в Linux, вот и возникло два вопроса

172
с++ и виртуальное наследование

с++ и виртуальное наследование

Необходимо создать базовый класс который будет иметь 4 наследникаВся проблема в том, что мне нужен базовый класс в одном экземпляре, так как...

283
MemoryPuzzle — простая игра в консоли [требует правки]

MemoryPuzzle — простая игра в консоли [требует правки]

Я тут сделал свою первую нормальную консольную игру на С++Это простая игра

184