CMAKE создание дополнительного каталога в файле сборки

#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. Большое спасибо! Я добавил некоторую дополнительную информацию и причину, по которой я делал это в первую очередь.