Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/21: Рейтинг темы: голосов - 21, средняя оценка - 4.52
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197

Конфигурирование сборки проекта с использованием CMake и CMakeLists.txt

18.08.2017, 00:04. Показов 4233. Ответов 5

Студворк — интернет-сервис помощи студентам
Добрый день!

Подскажите пожалуйста как в Cmake настроить 2 цели сборки
1. Release
2. Test

Архитектура проекта - такая:

├── include
│** └── Math
│** └── Math.h
├── source
│** ├── main.cpp
│** └── Math
│** └── Math.cpp
├── tests
└──CMakeLists.txt

В файле Math.cpp хочется писать:
C++
1
#include <Math/Math.cpp>
Думал что в CMakeLists.txt можно сделать так:
Кликните здесь для просмотра всего текста
cmake_minimum_required(VERSION 3.8)
project(test_project_1)

set(CMAKE_CXX_STANDARD 17)
include_directories(/include/)

file(GLOB_RECURSE SOURCE_FILES
include/*.h
include/*.hpp
source/*.c
source/*.cpp)

add_executable(test_project_1 ${SOURCE_FILES})


Но в Math.cpp данный include не работает.

Для цели Test - необходимо включать все файлы из include/source за исключением main, а также файлы из tests
Подскажите, пожалуйста, с чего можно начать!

Спасибо!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.08.2017, 00:04
Ответы с готовыми решениями:

Ошибка: CMake Error at deps/SFML/src/SFML/Window/CMakeLists.txt:106 (message): Xrandr library not found
Собсна, решил собрать библиотеку , столкнулся с непонятками, но потом дошло что не так, начал собирать, и в итоге получил ошибку, как...

CMake и организация сборки проекта
В общем, вопрос таков: каким образом можно &quot;наставить&quot; cmake, чтобы он собирал бинарники в одной директории, объектники отправлял в другую,...

Сборка проекта cmake с вложенными cmake
Всем привет. Подскажите пожалуйста вот у меня есть проектный файл и в нем мне надо как то обьявить указание на хранилища с другими...

5
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.08.2017, 00:07
Цитата Сообщение от PakistanCode Посмотреть сообщение
с чего можно начать
├── include
│** └── Math
│******** └── Math.h



Code
1
2
list(APPEND PATH_INCLUDES ${gPATH_SRC}/include)
include_directories(${PATH_INCLUDES})
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
18.08.2017, 00:12  [ТС]
Проект и имеет такую структуру, не обратил внимание когда копипастил вывод с консоли



В Math.cpp собственно хотелось бы написать\
C++
1
#include <Math/Math.cpp>
0
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
18.08.2017, 08:47  [ТС]
Такой вариант, к сожалению не работает.

Кликните здесь для просмотра всего текста
cmake_minimum_required(VERSION 3.8)
project(test_project_1)

set(CMAKE_CXX_STANDARD 17)


#set(INCLUDE_DIR /include)
#include_directories(INCLUDE_DIR)
#include_directories(/include/)

file(GLOB_RECURSE SOURCE_FILES
include/*.h
include/*.hpp
source/*.c
source/*.cpp)

list(APPEND PATH_INCLUDES /include)
include_directories(${PATH_INCLUDES})

add_executable(test_project_1 ${SOURCE_FILES})


Добавлено через 8 часов 32 минуты
Не появилось идеи? (
0
Эксперт С++
 Аватар для hoggy
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.08.2017, 11:36
Лучший ответ Сообщение было отмечено PakistanCode как решение

Решение

Цитата Сообщение от PakistanCode Посмотреть сообщение
Не появилось идеи?
тут нечего думать.
все предельно просто, ясно и понятно:

карта проекта:

Code
1
2
3
4
5
6
7
8
9
10
11
executable
 |--- include
 |     `-- executable
 |           `-- executable.h
 |--- source
 |     |--- executable.cpp
 |      `-- main.cpp
 |
 |--- CMakeLists.txt
 |--- msvc-release.bat
  `-- map.txt
=== executable.h ===============================

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
 
namespace executable{
 
    void hello();
 
} // namespace executable
 
=== executable.cpp ===============================
 
#include <iostream>
 
namespace executable{
 
    void hello() 
    {
        std::cout << "hello, world!\n";
    }
 
} // namespace executable
=== main.cpp ===============================

C++
1
2
3
4
5
6
#include <executable/executable.h>
 
int main()
{
    executable::hello();
}
=== CMakeLists.txt ===============================

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
cmake_minimum_required(VERSION 2.8)
 
#--- имя проекта совпадает с именем каталога проекта
get_filename_component(PROJECT_NAME ${CMAKE_CURRENT_SOURCE_DIR} NAME)
 
#--- имя главной цели. CXX значает, что проект на с++
project( ${PROJECT_NAME} CXX )
 
########################################################################
 
#--- обработка хедеров
if(IS_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include)
    list(APPEND PATH_INCLUDES ${CMAKE_CURRENT_SOURCE_DIR}/include)
    FILE (GLOB_RECURSE  HEADERS ${CMAKE_CURRENT_SOURCE_DIR}/include/*)
endif()
include_directories(${PATH_INCLUDES})
 
########################################################################
 
#--- обработка cpp-файлов
FILE (GLOB_RECURSE SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/source/*)
 
########################################################################
 
#--- создание цели проекта
add_executable(${PROJECT_NAME} ${SOURCES} ${HEADERS} )
 
########################################################################
=== msvc-release.bat ===============================

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
@echo off
cls
 
set "PATH_CMAKEx64=%eROOT%\programm\x64\CMake\bin;C:\Program Files\CMake\bin;"
set "PATH_CMAKEx86=%eROOT%\programm\x86\CMake\bin;C:\Program Files (x86)\CMake\bin;"
set "PATH_CMAKE=%PATH_CMAKEx64%;%PATH_CMAKEx86%"
 
set "ePATH_SRC=%~dp0"
for %%a in (%ePATH_SRC%.) do set ePROJECT=%%~na
set "eCOMPILLERTAG=msvc2015"
set "eBUILD_TYPE=Release"
set "eADDRESSMODEL=32"
set "eROOT=%~dp0"
 
rem ===== implementation ======
set eROOT=%eROOT:~0,-1%
set ePATH_SRC=%ePATH_SRC:~0,-1%
 
if "%eCOMPILLERTAG%" == "msvc2012"  set "eGENERATOR=Visual Studio 11"
if "%eCOMPILLERTAG%" == "msvc2013"  set "eGENERATOR=Visual Studio 12"
if "%eCOMPILLERTAG%" == "msvc2015"  set "eGENERATOR=Visual Studio 14"
 
if "%eADDRESSMODEL%"=="64" (
    set "eGENERATOR=%eGENERATOR% Win64"
)
 
set ePATH_BLD=%eROOT%\build\%eCOMPILLERTAG%\%ePROJECT%-%eBUILD_TYPE%-%eADDRESSMODEL%
 
echo PROCJET ............ %ePROJECT%
echo SOURCE DIRECTORY ... %ePATH_SRC%
echo BUILD DIRECTORY .... %ePATH_BLD%
echo COMPILLERTAG ....... %eCOMPILLERTAG%
echo GENERATOR .......... %eGENERATOR%
echo BUILD TYPE ......... %eBUILD_TYPE%
 
set PATH=%PATH_CMAKE%;%PATH%
cmake  -H"%ePATH_SRC%" -B"%ePATH_BLD%" -G"%eGENERATOR%" -DCMAKE_BUILD_TYPE=%eBUILD_TYPE%
 
if errorlevel 1 (
    @echo [ERROR] cmake finished with error!!!
    exit /b 1
)
 
cd %ePATH_BLD%
cmake --build . --config %eBUILD_TYPE%
 
if errorlevel 1 echo [ERROR] compiler errors ...
 
exit /b
 
rem =========================================================================
rem =========================================================================
1
5 / 5 / 5
Регистрация: 05.02.2013
Сообщений: 197
19.08.2017, 15:05  [ТС]
Спасибо тебе большое, добрый человек!)
Всё заработало!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
19.08.2017, 15:05
Помогаю со студенческими работами здесь

Собрать CMakeLists.txt
Доброго времени суток. Такая проблема. Следовал этому мануалу http://habrahabr.ru/post/134502/. Дошел до &quot;Назовём отредактированный...

Не выходит добавить boost в CMakeLists.txt
Всем привет. Это мой cmake_minimum_required(VERSION 3.0) project(test2) add_executable(test2 main.cpp) install(TARGETS...

Иерархия CmakeLists.txt файлов в проекте
День добрый! У меня есть модуль, который я хочу не каждый раз добавлять в проект пофайлово, а просто на него ссылаться из головного...

Как подключить Boost::serialization в CMakeLists.txt?
Если кто-то работал с таким и готов помочь, то спасибо)

Как добавить библиотеку Xtst (это X11 расширение) в cmakelists.txt ?
Библиотека Xtst установлена. OS ubuntu. При подключении через pro файл программа компилируется: Как добавить библиотеку...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru