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

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

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

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

Подскажите пожалуйста как в 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
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
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
Всем привет. Подскажите пожалуйста вот у меня есть проектный файл и в нем мне надо как то обьявить...

Собрать CMakeLists.txt
Доброго времени суток. Такая проблема. Следовал этому мануалу http://habrahabr.ru/post/134502/....

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



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

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


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

Кликните здесь для просмотра всего текста
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
Эксперт С++
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
18.08.2017, 11:36 5
Лучший ответ Сообщение было отмечено PakistanCode как решение

Решение

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

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

Код
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 ===============================

Код
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  [ТС] 6
Спасибо тебе большое, добрый человек!)
Всё заработало!
0
19.08.2017, 15:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.08.2017, 15:05
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru