не так давно пользуюсь 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? Потому что такое подход, который сейчас использую я, немного утомляет... приходится каждый файл удалять и добавлть в ручную...
Для начала: зачем вы в одной папке держите хэдэры и соурсные файлы? Это лучше разделять. Когда у вас все хэдэры в отдельной папке include
, то в CMakeLists.txt
их можно включить с помощью:
include_directories(include)
Далее, когда у вас все соурсные файлы в отдельной папке, к примеру sources
, то делаем так:
set(GLOB SRC_SRC "sources/*.cpp")
Поясню: сдесь в SRC_SRC включаются все файлы с расширением .cpp которые есть в папке sources. Далее просто делаете:
add_executable(${PROJECT_NAME} ${SRC_SRC})
Как-то так. Но вообще лучше делать библиотеки, конечно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Чтобы сформировать строку использую std::stringstream (набиваю содержимым оператором <<), затем выбираю полученную строку методом std::stringstream::str:
Пишу консольное приложение в Linux, вот и возникло два вопроса
Необходимо создать базовый класс который будет иметь 4 наследникаВся проблема в том, что мне нужен базовый класс в одном экземпляре, так как...
Я тут сделал свою первую нормальную консольную игру на С++Это простая игра