Вы можете установить CMAKE_RUNTIME_OUTPUT_DIRECTORY
переменную как много раз , как хотите. Каждый параметр влияет только на исполняемые файлы, созданные с момента этого параметра и до следующего.
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# Futher executables will be placed under 'bin/'
add_executable(my_program <sources>...)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/tests)
# Futher executables will be placed under 'bin/tests/' instead
add_executable(test1 <sources>...)
add_executable(test2 <sources>...)
Если вы создаете тесты в отдельном CMakeLists.txt
, настройки можно сделать модульными:
CMakeLists.txt
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
# Futher executables will be placed under 'bin/'
add_executable(my_program <sources>...)
add_subdirectory(tests)
Тесты / CMakeLists.txt
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin/tests)
# Executables created below will be placed under 'bin/tests/' instead
add_executable(test1 <sources>...)
add_executable(test2 <sources>...)
На самом деле, когда вы вызываете add_executable
, он просто использует current значение переменной CMAKE_RUNTIME_OUTPUT_DIRECTORY
. Этот факт можно найти в документации о RUNTIME_OUTPUT_DIRECTORY
target target, на которую влияет переменная.