CMakeLists.txt
是用于配置 CMake 构建系统的文件类型,通常它不会达到 1000 字那么长。然而,为了帮助你理解并创建一个较为复杂的 CMakeLists.txt
文件,我将介绍一些常用的 CMake 命令和技巧,以便你能够使用它来配置更复杂的项目。下面是一个示例,其间包含对 CMake 的详细介绍和多个模块的使用,虽然未必达到 1000 字,但希望能对你有所帮助。
# CMake *版本要求
cmake_minimum_required(VERSION 3.10)
# 项目名称和版本号
project(MyComplexProject VERSION 1.0)
# 设置 C++ 标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 配置一些选项以便于控制项目的构建流程
option(ENABLE_TESTING "Enable test suite" ON)
option(ENABLE_EXTRA_FEATURES "Enable extra features" OFF)
# 输出项目的配置信息
message(STATUS "Project: ${PROJECT_NAME} - Version: ${PROJECT_VERSION}")
message(STATUS "Extra features enabled: ${ENABLE_EXTRA_FEATURES}")
# 查找源文件并将其设置为变量
file(GLOB SOURCES src/*.cpp)
# 处理单独的程序
add_executable(my_app ${SOURCES})
# 包含目录
target_include_directories(my_app PRIVATE ${PROJECT_SOURCE_DIR}/include)
# 检测和链接必要的库
find_package(Threads REQUIRED)
target_link_libraries(my_app PRIVATE Threads::Threads)
# 添加条件性编译选项
if (ENABLE_EXTRA_FEATURES)
target_compile_definitions(my_app PRIVATE ENABLE_EXTRA_FEATURES=1)
endif()
# 构建期间创建配置文件
configure_file(config.h.in config.h)
target_include_directories(my_app PRIVATE "${PROJECT_BINARY_DIR}")
# 如果启用了测试,添加 CTest 支持
if (ENABLE_TESTING)
enable_testing()
add_subdirectory(tests)
endif()
# 添加一些自定义目标
add_custom_target(
run
COMMAND my_app
WORKING_DIRECTORY ${CMAKE_PROJECT_DIR}
)
# 打包支持
include(GNUInstallDirs)
install(TARGETS my_app DESTINATION ${CMAKE_INSTALL_BINDIR})
install(FILES "${PROJECT_BINARY_DIR}/config.h" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
# 提供卸载选项
add_custom_target(uninstall
COMMAND ${CMAKE_COMMAND} -P "${CMAKE_SOURCE_DIR}/cmake_uninstall.cmake.in"
)
# 添加文档生成的目标
find_package(Doxygen)
if (DOXYGEN_FOUND)
add_custom_target(doc
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMENT "Generating API documentation with Doxygen"
VERBATIM
)
endif()
# 打印构建类型的提示信息
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
这个 CMakeLists.txt
文件涉及多个步骤:
option
命令来决定功能是否启用,比如测试或额外特性。file(GLOB ...)
查找源文件,也可以手动列出。target_include_directories
和 target_link_libraries
配置编译器使用的目录和库。CTest
并添加相应设置。run
用于执行程序。通过这些元素,你对于 CMakeLists.txt
的编写和项目配置应该有了更深入的认识,可以根据具体项目需求调整和扩展。记得根据项目需求添加更多自定义设置和模块。