Компилировать исходники из каталога `src` в двоичные файлы из каталога`bin` с помощью CMake
Каталог моего проекта содержит CMakeLists.txt
файл и src
а также include
каталоги в его корне. src
также содержит свой собственный CMakeLists.txt
, который связан с тем, что в корне. Есть ли способ, который я могу указать CMake, чтобы установить глобальный каталог сборки по умолчанию, чтобы синтаксис в src/CMakeLists.txt
близко к следующему?
include_directories(include)
add_executable(first main.cpp foo.cpp)
add_executable(second bar.cpp)
Я хотел бы, чтобы это дерево каталогов было построено:
CMakeLists.txt
src/
CMakeLists.txt
main.cpp
foo.cpp
bar.cpp
include/
...
bin/ (or build/)
first
second
1 ответ
Решение
Вы могли бы установить CMAKE_RUNTIME_OUTPUT_DIRECTORY
:
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin)
Тем не менее, это не создаст подкаталоги внутри bin/
для каждой отдельной цели.
Если вы хотите, вы можете создать вспомогательную функцию для переноса add_subdirectories
:
function(my_add_executable TargetName)
set(Files ${ARGV})
list(REMOVE_AT Files 0)
add_executable(${TargetName} ${Files})
set_target_properties(${TargetName} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY
"${CMAKE_SOURCE_DIR}/bin/${TargetName}")
endfunction()
затем просто измените ваши звонки на:
my_add_executable(first main.cpp foo.cpp)
my_add_executable(second bar.cpp)
Для получения более подробной информации, запустите
cmake --help-variable "CMAKE_RUNTIME_OUTPUT_DIRECTORY"
cmake --help-property "RUNTIME_OUTPUT_DIRECTORY"
cmake --help-property "RUNTIME_OUTPUT_DIRECTORY_<CONFIG>"