
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 文件涉及多个步骤:
基本设置:定义项目名,版本以及所需的* CMake 版本。 构建选项:使用 option 命令来决定功能是否启用,比如测试或额外特性。 源文件管理:利用 file(GLOB ...) 查找源文件,也可以手动列出。 编译器设置:通过 target_include_directories 和 target_link_libraries 配置编译器使用的目录和库。 条件编译:根据选项添加特定的编译器宏或其他设置。 测试支持:如果启用测试功能,会引入 CTest 并添加相应设置。 自定义目标:定义了额外的构建命令,比如 run 用于执行程序。 安装过程:规范安装目标与路径。 文档支持:调用 Doxygen 自动生成文档。通过这些元素,你对于 CMakeLists.txt 的编写和项目配置应该有了更深入的认识,可以根据具体项目需求调整和扩展。记得根据项目需求添加更多自定义设置和模块。