Я начинающий пользователь CMake. В моей среде есть несколько проектов, таких как:CMake one build directory для нескольких проектов
project
|------ CMakeLists.txt (The main Cmake)
|------ ProjectA
| |----- .cpp files
| |----- .hpp files
| |----- CMakeList.txt
|------ ProjectB
| |----- .cpp files
| |----- .hpp files
| |----- CMakeList.txt
|
|------ build
| |----- CMakeStuff
|------ bin
| |---- executables
|------ lib
| |---- libwhatever.a
|------ db
|---- Database stuff
Я хотел бы использовать один каталог компоновки для каждого проекта, как показано выше. Предпочтительно, чтобы его можно было разделить на несколько подпроектов, таких как build/projectA
, build/ProjectB
, так что, если мне нужно перестроить один проект, я могу удалить весь файл build/Project
, и все исчезнет, и новый Cmake
снова построит его.
У меня возникли трудности с настройкой CMAKE.
Мой оригинальный CMakeList.txt папку проекта:
cmake_minimum_required(VERSION 3.2.2.)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/../bin)
project(projectA)
set(CMAKE_BUILD_TYPE Debug)
file(GLOB SOURCES "*.cpp")
add_library(commonmessage SHARED ${SOURCES})
install(TARGETS commonmessage DESTINATION ../lib)
Мои вопросы:
A) Что произойдет, если я бегу CMake на одной директории сборки - это то, что возможно и что бы быть правильной конфигурацией CMAKE?
B) Моя компиляция для ProjectA
должна содержать файлы от ProjectB
- как я могу установить это в CMakeLists.txt
для каждого отдельного проекта?
C) В конце мне нужен один make-файл для создания всех, а также возможность индивидуального создания каждого проекта. Будет ли это возможно с помощью одного каталога сборки?
Спасибо за помощь.
Сэр, спасибо за помощь ... что делать, если мне нужно сгенерировать файлы lib и bin в целевой папке без необходимости «make install»? – Mendes
Хотя это возможно с помощью переменных 'CMAKE _ * _ OUTPUT_DIRECTORY', я бы не рекомендовал этого, потому что у вас может быть несколько каталогов сборки с несколькими конфигурациями (Debug vs. Release, другой компилятор и т. Д.), И всегда хорошо иметь возможность тестировать их параллельно, не перезаписывая файлы при компиляции. Зачем вам нужен bin/lib в корне вашего проекта? – SirDarius
Хорошая точка. 'bin' - это место, где будут установлены все исполняемые файлы. 'lib 'будет содержать все библиотеки. – Mendes