init
This commit is contained in:
70
CMakeLists.txt
Normal file
70
CMakeLists.txt
Normal file
@@ -0,0 +1,70 @@
|
||||
# 指定CMake最低版本为3.16
|
||||
cmake_minimum_required(VERSION 3.16)
|
||||
|
||||
# 项目名称:singlefile_practice,支持C和C++两种语言
|
||||
project(singlefile_practice LANGUAGES C CXX)
|
||||
|
||||
# ========== C语言标准设置 ==========
|
||||
# 使用C11标准
|
||||
set(CMAKE_C_STANDARD 11)
|
||||
# 要求严格遵循C标准,不允许编译器扩展
|
||||
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||
# 禁用编译器特定的扩展
|
||||
set(CMAKE_C_EXTENSIONS OFF)
|
||||
|
||||
# ========== C++语言标准设置 ==========
|
||||
# 使用C++17标准
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
# 要求严格遵循C++标准,不允许编译器扩展
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
# 禁用编译器特定的扩展
|
||||
# 禁用编译器特定的扩展
|
||||
set(CMAKE_CXX_EXTENSIONS OFF)
|
||||
|
||||
# ========== 包含目录设置 ==========
|
||||
# 添加include目录到编译器的头文件搜索路径
|
||||
include_directories("./include")
|
||||
|
||||
# ========== 源文件自动发现 ==========
|
||||
# 定义源代码根目录
|
||||
# 定义源代码根目录
|
||||
set(SOURCE_ROOT "${CMAKE_CURRENT_SOURCE_DIR}/src")
|
||||
|
||||
# 递归搜索src目录下所有C/C++源文件(.c .cc .cpp .cxx)
|
||||
# CONFIGURE_DEPENDS: 如果文件列表变化,自动重新运行CMake配置
|
||||
file(GLOB_RECURSE PRACTICE_SOURCES CONFIGURE_DEPENDS
|
||||
"${SOURCE_ROOT}/*.c"
|
||||
"${SOURCE_ROOT}/*.cc"
|
||||
"${SOURCE_ROOT}/*.cpp"
|
||||
"${SOURCE_ROOT}/*.cxx"
|
||||
)
|
||||
|
||||
# 如果没有找到源文件,输出警告信息
|
||||
if(NOT PRACTICE_SOURCES)
|
||||
message(WARNING "No C/C++ source files found under ${SOURCE_ROOT}")
|
||||
endif()
|
||||
|
||||
# ========== 自动为每个源文件创建可执行文件目标 ==========
|
||||
# 遍历所有找到的源文件
|
||||
foreach(SOURCE_FILE IN LISTS PRACTICE_SOURCES)
|
||||
# 计算源文件相对于src目录的相对路径
|
||||
file(RELATIVE_PATH REL_PATH "${SOURCE_ROOT}" "${SOURCE_FILE}")
|
||||
|
||||
# 将路径中的反斜杠和正斜杠替换为下划线
|
||||
string(REPLACE "\\" "_" TARGET_NAME "${REL_PATH}")
|
||||
string(REPLACE "/" "_" TARGET_NAME "${TARGET_NAME}")
|
||||
|
||||
# 将文件名中的点替换为下划线(例如:hello.c -> hello_c)
|
||||
string(REPLACE "." "_" TARGET_NAME "${TARGET_NAME}")
|
||||
|
||||
# 为该源文件创建可执行文件目标
|
||||
add_executable(${TARGET_NAME} "${SOURCE_FILE}")
|
||||
|
||||
# 设置可执行文件的输出目录为 build/bin
|
||||
set_target_properties(${TARGET_NAME} PROPERTIES
|
||||
RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin"
|
||||
)
|
||||
|
||||
# 输出编译日志信息
|
||||
message(STATUS "Add target: ${TARGET_NAME} <- ${REL_PATH}")
|
||||
endforeach()
|
||||
Reference in New Issue
Block a user