Files
exercises/CMakeLists.txt
T
2026-09-05 11:05:50 +08:00

29 lines
1001 B
CMake

cmake_minimum_required(VERSION 3.10)
project(exercises)
set(CMAKE_CXX_STANDARD 17)
file(GLOB_RECURSE SOURCES "*.cpp")
foreach (source ${SOURCES})
# 获取源文件所在目录(绝对路径)
get_filename_component(dir ${source} DIRECTORY)
# 计算相对于源码根目录的路径
file(RELATIVE_PATH rel_dir ${CMAKE_CURRENT_SOURCE_DIR} ${dir})
# 获取文件名(不带扩展名)
get_filename_component(name ${source} NAME_WE)
# 构造带相对路径的目标名,例如 src_utils_foo
if (rel_dir STREQUAL "")
set(target_name "${name}")
else ()
string(REPLACE "/" "__" rel_dir_flat "${rel_dir}")
set(target_name "${rel_dir_flat}__${name}")
endif ()
add_executable(${target_name} ${source})
# 顺便把可执行文件输出到与源文件对应的目录中(可选)
set_target_properties(${target_name} PROPERTIES
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/${rel_dir}"
)
endforeach ()