Cmake工程实践(一)

① 设置源码路径自动加载并把头文件包含进工程

 设置工程头文件和源码文件路径后, 让 CMake 自动加载,这样之后即使新增了头文件和源码也不用修改 CMakeList.txt

cmake_minimum_required(VERSION 3.20)
project("auto_add_src")

#设置头文件路径
include_directories("./inc")

#设置源码路径符号
aux_source_directory("." MAIN_SRC)
aux_source_directory("./src" SRC)

#设置编译目标所依赖的源码
add_executable(${
    
    PROJECT_NAME} ${
    
    MAIN_SRC} ${
    
    SRC})

 这样之后在 ./src 目录和 ./inc 目录新增了文件后不用修改以上 CMakeList.txt, 可以直接构建工程编译通过
 假如此时打开工程的话,会发现只有 .cpp 或者 .cc 等文件。假如工程需要包含头文件则需要以下配置:

file(GLOB INC "${INCLUDE_DIR}/*.h")
add_executable(${
    
    PROJECT_NAME} ${
    
    MAIN_SRC} ${
    
    SRC} ${
    
    INC})
// INC 可用其他变量名替代

② message 和 变量

 这个主要是用来构建项目时调试使用,通过 message 定位问题。

cmake_minimum_required(VERSION 3.20)
project("auto_add_src")

#cmake 直接退出
message(FATAL_ERROR "FATAL_ERROR")

#cmake 继续, 但是不继续生成工程了
message(SEND_ERROR "SEND_ERROR")

#警告, 并打印位置行号
message(WARNING "WARNING")

#NOTIC 输出字符串
message(NOTIC "NOTIC")

# -- 前缀输出字符串
message(STATUS "STATUS")

  cmake 设置变量给 C++

add_definitions(-D)
//add_definitions(-DSTATIC), 此时会给 源码文件传递一个 STATIC 的宏, 该宏默认为1

③ include 包含

 类似于 C++中头文件包含,用 include 包含文件中的内容替代当前语句

include("test.cmake") // 假如没有找到 test.cmake 就报错退出, 类似于 message(FATAL_ERROR "FATAL_ERROR")
include("test.cmake" OPTIONAL RESULT_VARIABLE ret)
// OPTIONAL             设置当前包含为可选项,假如没有找到该文件不退出
// RESULT_VARIABLE ret  假如找到该文件,ret 为包含文件的绝对路径; 否则为 NOTFOUND. 可通过 message 打印 ret
include

④ 打印编译时的生成信息

 类似于 visual studio 编译时的 output

//方式①:直接在 CMakeList.txt 中设置
set(CMAKE_VERBOSE_MAKEFILE ON)
//方式②:通过命令行 -v
cmake --build <build-path> -v

⑤ 设置输出路径

 a. 归档文件输出路径,主要包含静态库和动态库的符号文件(.lib .a .so)
  通常借助 CMAKE_CURRENT_LIST_DIR (CMakeList.txt的绝对路径)来设置

set(CMAKE_LIBRARY_OUTPUT_DIRECTORY <path>) //这个只对 linux 或者 Mac 有效,设置的是 .so的路径

set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY <path>) //.lib 或者 .a 的路径

 b. 执行程序输出目录(.exe .dll)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY <path>) //.exe 或者 .dll 的路径

猜你喜欢

转载自blog.csdn.net/PX1525813502/article/details/128555609