Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.95/19: Рейтинг темы: голосов - 19, средняя оценка - 4.95
3 / 3 / 1
Регистрация: 13.03.2011
Сообщений: 114
1

Правильная организация файлов проекта, CMake

01.09.2014, 13:45. Показов 3686. Ответов 1
Метки нет (Все метки)

Здравствуйте... Из прочитанной информации по всему простору интернета у меня теперь в голове каша...
Прошу ответить людей, работающих над крупными проектами и имеющих опыт в.. этом...

Я только начал разбираться с CMake, и у меня много вопросов о том как нужно организовывать файлы в проектах. Рассмотрю один из мдулей проекта как отдельный проект... Из модуля собирается ЛИБА

Что есть в директории модуля:
-- include
-- src
-- CMakeList.txt

Вопрос 1: правильно ли я сделал, что в include положил только .hpp, а в src только .cpp? Или в src пихают всё, а в include только заголовочники?

Я начитался всякого, и теперь у меня каша, вот два варианта CMakeList, которые я опробовал:

Вариант1:
CMakeList.txt
Bash
1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 2.8) 
 
project(SecretProject)          
 
# Sources
file(GLOB Library_HEADER include/*.hpp)
file(GLOB Library_SOURCES src/*.cpp)
 
# Executable
set(LIBRARY_OUTPUT_PATH  ${PROJECT_BINARY_DIR}/lib)
add_library(SecretProjectLib ${Library_SOURCES} ${Library_HEADERS}) # Создание статической библиотеки
Так проект генерируется (для студии делал), но при сборке студия пищет:
CMake error : The source directory "C:/Users/user/Desktop/Study/../SecretProject" does not exist.

Вопрос 2: Ээээ.. всё, я завис... что не так?

Вариант1:
CMakeList.txt
Bash
1
2
3
4
5
6
7
8
9
10
11
cmake_minimum_required(VERSION 2.8)
 
project(SecretProject)
 
include_directories(include)        
 
SET(SOURCE_LIB SecretProject1.cpp SecretProject2.cpp)   # Установка переменной со списком исходников
 
# Executable
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
add_library(SecretProjectLib ${SOURCE_LIB})
Мне бы сделать так, чтобы без абсолютных путей...

Вопрос 3: это вообще не работает, я не понимаю, как указать CMake-у, что исходники в папочке src... как это сделть?

Вопрос 4: по поводу set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)
правильно ли я понимаю, что если я сгенерирую проект и построю, то мои либы будут в папочке /lib
И ещё... если я подрублю этот модуль как подпроект (subdir()), то папочка lib создатся в "главном проекте". Сам не мог проверить, так как ещё ни один проект не построился)
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.09.2014, 13:45
Ответы с готовыми решениями:

Правильная организация cmake проекта
Вопрос от веб разработчика избалованного грейдлами и мавенами по правильной организации структуры...

Организация проекта с cmake
Доброго времени суток,помогите разобраться с вопросом:как правильно организовать проект с...

Ошибка генерации CodeBlocks проекта CMake`ом
Пожалуйста, подскажите как правильно сгенерировать CodeBlocks проект с CMake`ом. Опишу по шагам что...

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

1
672 / 288 / 99
Регистрация: 04.07.2014
Сообщений: 810
01.09.2014, 14:12 2
Я больше привык, что cpp и hpp лежат в одном месте. Это позволяет проще оперировать с этими файлами, в том числе и некоторые IDE предполагают, что парные файлы лежат вместе и позволяют переключаться между ними. А в отдельный include публичные заголовочные файлы могут попасть и при установке (install).

Так или иначе, при формировании проекта могут понадобиться дополнительные скрипты CMake. Например активация С++11 или отображения всех ошибок. Эти дополнительные файлы складываю в /cmake или /utils/cmake.
После чего они используются в главном CMakeFile:
Bash
1
2
3
4
5
6
7
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/utils/cmake")
 
# Enable Warning All
include(EnableWarningAll)
 
# Enable C++11
include(CheckCXX11Features)
Если проект разбивается на несколько частей, то лучше разложить их по директориям. Например /libSecret /projets/SecretDemo и в каждой директории создать CMakeFile импортируемые из директории уровнем выше

Bash
1
2
3
4
5
# /CMakeLists.txt
cmake_minimum_required(VERSION 2.8.11)
project(egegWorkspace CXX)
add_subdirectory(libSecret)
add_subdirectory(SecretDemo)
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# /libSecret/CMakeLists.txt
set(LIB_SECRET_HEADERS_PUBLIC
    "secretStorage.hpp"
)
 
set(LIB_SECRET_HEADERS_PRIVATE
    "secretStoragePrivate.hpp"
)
 
set(LIB_SECRET_SOURCES
    "secretStorage.cpp"
    "secretStoragePrivate.cpp"
)
 
add_library(libSecret SHARED ${LIB_SECRET_SOURCES} ${LIB_SECRET_HEADERS_PUBLIC} ${LIB_SECRET_HEADERS_PRIVATE})
Bash
1
2
3
#SecretDemo/CMakeLists.txt
add_executable(SecretDemo "SecretDemo.cpp")
target_link_libraries(SecretDemo libSecret)
Если надо добавить для компилируемой программы/библиотеки дополнительные include, то
Bash
1
set_property(TARGET SuperPuperSecterProgram PROPERTY INCLUDE_DIRECTORIES ${Boost_INCLUDE_DIRS})
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.09.2014, 14:12

Правильная организация проекта?
Здравствуйте, расскажите пожалуйста как, как правильно организовать свой проект(Qt - C++): 1. Все...

Создание проекта в cmake для с и с++ файлов
Доброго времени суток. Есть вопрос. У меня с++ проект собирается с помощью cmake. Возникла...

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

Организация рабочего процесса и CMake
Здравствуйте я решил использовать cmake при написании лабораторных работ Подскажите: 1)...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.