#c #cmake
#c #cmake
Вопрос:
Моя текущая структура проекта выглядит следующим образом:
Project
--src/
--CMakeLists.txt
--Graph.cpp
--Graph.hpp
--main.cpp
--build/
--CMakeLists.txt
CMakeLists.txt
В папке проекта, похожей на это:
cmake_minimum_required(VERSION 3.18)
project(GRAPHTHEORY VERSION 1.0.0)
set (CMAKE_CXX_STANDARD 17)
add_subdirectory(src)
the CMakeLists.txt в src файл выглядит следующим образом:
add_library(Graph Graph.hpp Graph.cpp)
add_executable(graph_theory main.cpp)
target_link_libraries(graph_theory PRIVATE Graph )
Когда я захожу в build/
каталог и запускаю cmake ..
, а затем make
исполняемый graph_theory
файл находится в новом src/
каталоге внутри build
Я не уверен, почему src/
в моем каталоге build / создается новый каталог.
Редактировать:
Итак, что я пытался сделать, это повторить запуск
cmake -S src/ -B build/
из каталога проекта.
Когда я делаю выше, а затем cd
в build/
, а затем запускаю make
, исполняемый файл создается в build/
каталоге.
Комментарии:
1. он содержит файлы сборки, связанные с исходными файлами в каталоге src?
2. @user253751 есть ли способ, чтобы исполняемый файл отображался непосредственно в каталоге сборки? Я имею в виду, то есть то, что я описываю, является ожидаемым поведением?
Ответ №1:
Артефакты сборки и кэш хранятся в каталоге, который отражает подкаталог, добавленный вами в CMake с add_subdirectory
помощью команды.
Однако вы можете изменить, где находится конечная цель, изменив значение по умолчанию RUNTIME_OUTPUT_DIRECTORY
. Например, этот код поместит его в bin
каталог:
set_target_properties(graph_theory
PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin/"
)
Комментарии:
1. Большое спасибо! Я добавил некоторую дополнительную информацию и причину, по которой я делал это в первую очередь.