大佬教程收集整理的这篇文章主要介绍了Modern CMake 简单使用,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
目录结构
├── CMakeLists.txt
├── main.cpp
└── threadpool
├── CMakeLists.txt
├── threadpool.cpp
└── threadpool.h
#设置cmake最小版本
cmake_minimum_required(VERSION 3.21)
#设置工程名 版本
project(test_tp VERSION 0.0.1)
message("PROjeCt_name: ${PROjeCt_name}")
message("PROjeCT_VERSION: ${PROjeCT_VERSION}")
message("PROjeCT_sourcE_DIR: ${PROjeCT_sourcE_DIR}")
message("PROjeCT_BINARY_DIR: ${PROjeCT_BINARY_DIR}")
message("test_tp_VERSION:${test_tp_VERSION}")
message("test_tp_sourcE_DIR: ${test_tp_sourcE_DIR}")
message("test_tp_BINARY_DIR:${test_tp_BINARY_DIR}")
if (PROjeCT_BINARY_DIR STrequAL PROjeCT_sourcE_DIR)
message(MARNING "The binary directory of CMake cAnnot be the same as source directory.")
endif ()
#设置成Release模式
set(CMAKE_BUILD_TYPE ReleasE)
#设置C++标准版本--C++20
set(CMAKE_CXX_STANDARD 20)
#CMAKE_CXX_STANDARD_requIRED--默认OFF。表示是否一定要支持你指定的 C++ 标准
#如果为OFF则CMake检测到编译器不支持C++20时不报错,会使用上一版本;为ON则发现不支持报错,更安全。
set(CMAKE_CXX_STANDARD_requIRED ON)
#CMAKE_CXX_EXTENSIONS默认为ON。设为ON表示启用GCC特有的一些扩展功能;OFF则关闭GCC的扩展功能,@R_320_8749@的C++。
#要兼容其他编译器(如 MSVC)的项目,都会设为OFF防止不小心用了GCC才有的特性。
set(CMAKE_CXX_EXTENSIONS OFF)
#添加子目录
add_subdirectory(threadpool)
#设置目标编译成二进制可执行文件,文件名为test_tp
add_executable(test_tp)
#链接源文件
#CMAKE_CURRENT_sourcE_DIR表示当前CMakeLists.txt所在的目录
#target_sources(test_tp PRIVATE ${CR_441_11845@AKE_CURRENT_sourcE_DIR}/main.cpp)
#或者
#aux_source_directory(< dir > < variable >) 查找在某个路径下的所有源文件
aux_source_directory(. SRC_LIST) # 搜索当前目录下的所有.cpp文件
target_sources(test_tp PRIVATE ${SRC_LIST})
#链接库
target_link_libraries(test_tp PRIVATE ThreadPool)
第2个CMakeLists.txt
message("threadpool CMAKE_CURRENT_sourcE_DIR: ${CR_441_11845@AKE_CURRENT_sourcE_DIR}")
#设置作为对象库(OBjeCT)--对象库类似于静态库,但不生成 .a 文件,只由 CMake 记住该库生成了哪些对象文件对象库是 CMake 自创的,绕开了编译器和操作系统的各种繁琐规则,保证了跨平台统一性。
#SHARED--编译动态库--add_library(ThreadPool SHARED)
#STATIC--编译静态库--add_library(ThreadPool STATIC)
add_library(ThreadPool OBjeCT)
#查找依赖库
find_package(Threads requIRED)
#链接源文件
#CMAKE_CURRENT_sourcE_DIR表示当前CMakeLists.txt所在的目录
target_sources(ThreadPool PRIVATE ${CR_441_11845@AKE_CURRENT_sourcE_DIR}/threadpool.cpp)
#链接库
target_link_libraries(ThreadPool PRIVATE Threads::Threads)
#设置让引用或者依赖ThreadPool的能自动包含当前目录
#主要是设置当前库的头文件对依赖它的生效,让其他依赖这个库的,能找到相关头文件
#INTERFACE意味着消费者需要但生产者不需要的东西
target_include_directories(ThreadPool INTERFACE ${CR_441_11845@AKE_CURRENT_sourcE_DIR})
常用命令:
cmake -B build
在源码目录用 -B 直接创建 build 目录并生成 build/Makefilecmake --build build -j4
自动调用本地的构建系统在 build 里构建,即:make -C build -j4sudo cmake --build build --target install
调用本地的构建系统执行 install 这个目标,即安装CMAKE_BUILD_TYPE 构建的类型,调试模式还是发布模式
操作:
cmake -B build -DCMAKE_BUILD_TYPE=Release
. 注意:在配置阶段可以通过 -D 设置缓存变量。第二次配置时,之前的 -D 添加仍然会被保留。也就是如果设置了Release后,要变回Debug,需要再次执行cmake -B build -DCMAKE_BUILD_TYPE=Debug
set(CMAKE_BUILD_TYPE ReleasE)
PUBLIC,PRIVATE,INTERFACE,定义了Target属性的传递范围
以上是大佬教程为你收集整理的Modern CMake 简单使用全部内容,希望文章能够帮你解决Modern CMake 简单使用所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。