CMAKE的用法

CMake是一个开源、跨平台的自动化构建系统,它使用CMakeLists.txt文件来描述项目的构建过程,并生成标准的构建文件(如Makefile或Visual Studio项目文件),然后依据这些文件来构建项目。以下是CMake的详细用法和示例:

# 设置CMake版本:通过cmake_minimum_required指定CMake的最低版本要求,以确保使用的CMake功能在当前环境中是可用的。
cmake_minimum_required(VERSION 3.10)

# 定义项目:使用project命令定义项目的名称和版本。这会设置一些变量,如${PROJECT_NAME}和${PROJECT_VERSION},供后续使用
project(ComplexProject VERSION 1.2.3)

# 设置C++标准:通过set命令设置CMake使用的C++标准。这里设置为C++14,并要求严格遵循该标准。
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# 编译选项:根据编译器类型(如GNU GCC或Clang)设置额外的编译选项,如开启所有警告。
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wextra -pedantic")
endif()

# 查找并添加外部库:使用find_package查找外部库(如boost),并包含其头文件目录。
find_package(Boost 1.70 COMPONENTS filesystem system REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})

# 添加自定义库:使用 add_libarary命令添加一个静态库MyCustomLibrary,并链接之前找到的Boost库 
add_library(MyCustomLibrary STATIC
    lib/mycustomlibrary.cpp
    lib/mycustomlibrary.h
)
target_link_libraries(MyCustomLibrary PRIVATE ${Boost_LIBRARIES})

# 使用add_executable添加可执行文件,并链接之前找到的Boost库
add_executable(MyApp main.cpp)
target_link_libraries(MyApp PRIVATE MyCustomLibrary)

# 包含子目录:使用add_subdirectory命令包含另一个子项目,这允许递归的处理子目录中的CMAKELISTS.txt文件。
add_subdirectory(subproject)

# 设置安装规则
install(TARGETS MyApp DESTINATION bin)
install(TARGETS MyCustomLibrary DESTINATION lib)
install(FILES lib/mycustomlibrary.h DESTINATION include/MyCustomLibrary)

# 启用测试(假设有测试文件)
enable_testing()
add_test(NAME MyAppTest COMMAND MyApp)

# 条件编译示例(假设根据平台决定是否包含某个文件)
if(WIN32)
    add_definitions(-DWIN32_SPECIFIC)
    source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR} FILES win32_specific.cpp)
    target_sources(MyApp PRIVATE win32_specific.cpp)
endif()

# 打印一些信息(调试用)
message(STATUS "Project name: ${PROJECT_NAME}")
message(STATUS "Boost found: ${Boost_FOUND}")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值