要编写一个CMake配置文件(通常命名为CMakeLists.txt),你需要遵循CMake的语法和约定。下面是一个简单的示例,展示了如何编写一个基本的CMakeLists.txt文件:
# 指定CMake的最小版本要求
cmake_minimum_required(VERSION 3.10)
# 设置项目信息
project(MyProject VERSION 1.0)
# 添加子目录,并在其中查找CMakeLists.txt文件
add_subdirectory(src)
add_subdirectory(tests)
# 设置包含文件目录
include_directories({PROJECT_SOURCE_DIR}/include)
# 添加库文件
add_library(MyLibrary STATIC src/mylibrary.cpp)
# 添加可执行文件
add_executable(MyExecutable src/main.cpp)
# 将库文件链接到可执行文件
target_link_libraries(MyExecutable MyLibrary)
# 添加安装目标
install(TARGETS MyExecutable MyLibrary
RUNTIME DESTINATION bin
LIBRARY DESTINATION lib
ARCHIVE DESTINATION lib/static)
# 添加自定义的构建规则或命令
add_custom_command(
OUTPUT {CMAKE_CURRENT_BINARY_DIR}/my_custom_file.h
COMMAND my_custom_command_generator {CMAKE_CURRENT_BINARY_DIR}/my_custom_file.h
DEPENDS some_input_file
VERBATIM)
# 添加自定义的构建目标
add_custom_target(
MyCustomTarget
ALL
DEPENDS {CMAKE_CURRENT_BINARY_DIR}/my_custom_file.h
COMMENT "Running my custom command")
# 启用C++11标准
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED True)
# 检查编译器是否支持某个特性
check_cxx_compiler_flag("-std=c++14" COMPILER_SUPPORTS_CXX14)
if(COMPILER_SUPPORTS_CXX14)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++14")
endif()
# 查找外部库并链接
find_package(Boost REQUIRED COMPONENTS system)
add_executable(BoostExample example.cpp)
target_link_libraries(BoostExample Boost::system)
这个CMakeLists.txt文件做了以下几件事情:
指定了CMake的最小版本要求。
设置了项目的名称和版本。
添加了子目录以包含其他CMake配置文件。
设置了包含文件目录。
添加了一个静态库MyLibrary。
添加了一个可执行文件MyExecutable,并将其链接到MyLibrary。
定义了安装目标,将库和可执行文件安装到指定目录。
添加了一个自定义构建命令和自定义构建目标。
启用了C++11标准,并检查了编译器是否支持C++14。
查找了外部库(例如Boost),并将其链接到一个可执行文件。
注意,CMake的配置文件可以非常复杂,并且支持许多高级功能和选项。上面的例子只是一个起点,你可能需要根据你的项目需求进行调整和扩展。
为了使用上述CMakeLists.txt文件,你需要在项目的根目录中运行CMake来生成构建文件(如Makefile或Ninja文件),然后使用生成的构建文件来构建你的项目。例如,在命令行中运行以下命令:
mkdir build
cd build
cmake …
make
这将生成构建文件并构建你的项目。