如何编写一个cmake

要编写一个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

这将生成构建文件并构建你的项目。

  • 28
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值