👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

делайте директорию build и там запускайте cmake, а дальше в случае чего, просто удаляете директорию.

То, что Вам не нравится, называется out-of-source build и является предпочтительным подходом по мнению создателей CMake.

А не лень
Честно говоря, лень.
правильным организовывать структуру каталогов в проекте, основанным на Cmake?
Не думаю, что использование CMake накладывает отпечаток на структуру проекта. При использовании autotools или NAnt, на мой взгляд, проект организовывается так же.
Начну с себя
На мой взгляд, trunk, branches и tags наверное больше относятся к системе контроля версий чем системе сборки.
А так, да, на каждый отдельный «модуль» (если он действительно отдельный, а не просто директория) отдельный файл CMakeLists.txt, для удобства разработки отдельно от всего проекта, обязательно отдельный файл на тесты, т.к. опции компиляции для тестов могут отличаться (code coverage и прочее). Все прочие конфигурационный файлы (для генераторов документации, форматирования кода и т.п.) ложу обычно в корень, а цели на них описываю в центральном CMakeLists.txt. Ну и конечно же папочка с кастомными модулями — куда же без них...

Project
├── CMakeLists.txt
├── CMakeModules
│ ├── xxx.cmake
│ └── yyy.cmake
├── Core
│ ├── CMakeLists.txt
│ ├── include
│ │ ├── this.h
│ │ └── that.h
│ ├── src
│ │ ├── this.cpp
│ │ └── that.cpp
│ └── test
│ ├── CMakeLists.txt
│ ├── this_test.cpp
│ └── that_test.cpp
├── External
│ └── something
└── Ui
├── CMakeLists.txt
├── include
│ └── widget.h
└── src
├── main.cpp
└── widget.cpp

Хотелось бы добавить, что иногда, некоторые разработчики явно запрещают сборку в корневой директории с исходным кодом.

По приведенно выше ссылке на сборочный скрипт проекта gnuradio это обеспечиватся строчками:


if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
message(FATAL_ERROR «Prevented in-tree build. This is bad practice.»)
endif(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})

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

полезно было бы постучаться головой о стену.
Ну... Мэнтейнеры... Имеют право, в рамках своего проекта :) .

Мне больше не по душе вот от таких вот вещей, когда сборочный процесс жестко завязан на то, что сборка должна осуществляться в папке <root_source_directory>/build. Т.е. именно build и именно в корне с исходниками.

Підписатись на коментарі