CMake命令:find_package、make instal、make --build .、CMAKE_PREFIX_PATH、add_compile_options、set_property

1、find_package

作用: 帮助查找工程依赖的包(lib、so)文件。

1.1、两种查找模式:

两种模式均为在指定路径下查找指定类型cmake文件来查找依赖的包,差异为两模式的查找路径不同

  • MODULE模式下
    CMake在 CMAKE_MODULE_PATH路径及CMake安装路径 下,通过查找名为Find.cmake的文件来查找包文件。

  • CONFIG模式下
    CMake在特定的 cmake变量(如CMAKE_PREFIX_PATH、CMAKE_FRAMEWORK_PATH)指定的路径及系统环境变量PATH指定的路径 下,通过查找名为Config.cmake或者-config.cmake的文件来查找包文件。

1.2、查找结果:

查找后,cmake定义_FOUND_INCLUDE_DIR_LIBRARIES等变量来保存包的查找状态。

1.3、用例:

FIND_PACKAGE(Qt6 6.3.1 COMPONENTS Widgets REQUIRED)

参考资料:cmake(7):find_package命令详解

2、控制台的make install指令与CmakeList中的install命令

2.1. install命令

  • 作用: 指定在用make install指令安装时运行的规则,可以用来安装目标二进制、动态库、静态库以及文件、目录、脚本等。本质是将对应文件复制到指定目录
  • 用例: 将include目录复制到${CMAKE_INSTALL_INCLUDEDIR}/abc/目录下
    install(FILES include/ DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/abc/")
    

2.2. make install指令

  • 作用: make install指令用于运行install命令指定的安装内容。

参考资料:【CMake】cmake的install指令

3、cmake --build .

参数解析:

–build : 指定项目二进制树所在的路径
. : 表示当前路径

作用: cmake --build .效果与make等价,但可以自动识别适配当前平台的生成器,无需手动指定采用mingw32-make还是Nmake,常用于跨平台脚本中。

注:其用于cmake ..命令之后。

参考资料:
1、请问怎么理解cmake --build . 这句话?
2、CMake 官方文档解释

4、CMAKE_PREFIX_PATH

作用: 用来指明软件/库安装路径前缀,以供find_package()find_program()find_library()find_file()find_path()命令搜索使用,这样就方便搜索可执行文件、头文件及库文件等。
用法:
CMAKE_PREFIX_PATH是一个分号分隔的路径列表:

  1. 用法一:
list(APPEND CMAKE_PREFIX_PATH "D:\Qt\6.3.1\mingw_64") # 安装路径前缀
  1. 用法二:
cmake -DCMAKE_PREFIX_PATH=D:\Qt\6.3.1\mingw_64

注: 添加了后,find_package()等命令会自动搜索安装路径下bin, lib, include等子目录

参考资料:
1、CMake | 将路径添加到 CMAKE_PREFIX_PATH
2、CMAKE_PREFIX_PATH官方文档

5、add_compile_options与CMAKE_CXX_FLAGS

作用: 都用来设置编译选项,差异为add_compile_options针对所有编译器(包括c和c++编译器),CMAKE_CXX_FLAGS只针对C++编译器
用法:

add_compile_options(-Wall -Wextra -pedantic -Werror)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")

参考资料:
1、add_compile_options和CMAKE_CXX_FLAGS的区别

6、set_property和get_property

作用: 在指定域中设置/获取一个命名属性,具体见cmake命令之set_property和get_property。

7、if/elseif/else

用法:

if()
    
elseif() # 可选,且可重复
    
else([condition]) # 可选
    
endif([condition])

注: elseendif后括号中的condition可写可不写,不作为判断条件,但若写只能与if中的一致。

参考资料:
1、Cmake中的条件判断if/elseif/else

8、configure_file

作用: 将一个文件拷贝到指定目录,并匹配文件中特定字段,用当前值修改其值,具体见:CMake官方文档

你可能感兴趣的:(CMAKE,CMake)