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

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

01.09.2014, 13:45. Показов 5509. Ответов 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
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.09.2014, 13:45
Ответы с готовыми решениями:

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

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

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

1
694 / 304 / 99
Регистрация: 04.07.2014
Сообщений: 851
01.09.2014, 14:12
Я больше привык, что 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.09.2014, 14:12
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru