Cmake 简要总结
cmake基本语法
project指定项目名称和版本号。
project(MyProject VERSION 1.0)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
add_executable:指定生成可执行文件的源代码文件。
add_executable(MyProject main.cpp)
add_library:指定生成静态库或动态库的源代码文件。
add_library(MyLibrary STATIC lib.cpp)
target_link_libraries:指定链接的库文件。
target_link_libraries(MyProject MyLibrary)
include_directories:指定头文件的目录。
include_directories(include)
set:设置变量的值。
set(SRC_FILES main.cpp)
find_package:用来查找依赖包,理想情况下,find_package() 命令就能把一整个依赖包的头文件包含路径、
库路径、库名字、版本号等情况都获取到。
find_package(Qt6 REQUIRED COMPONENTS Charts)
REQUIRED:该选项表示如果没有找到需要的包就会停止并且报错.
COMPONENTS:在REQUIRED选项之后,或者如果没有指定REQUIRED选项但是指定了COMPONENTS选项,
在COMPONENTS后面就可以列出一些与包相关部分组件的清单.
file(GLOB_RECURSE ...):是一个用来匹配指定路径下所有符合通配符条件的文件的命令。
GLOB_RECURSE :是递归查找目录下的所有文件,file() 命令则可以用来获取文件列表。
file(GLOB_RECURSE HEADER_FILES "*.h")命令查找所有以.h 结尾的文件,
并将它们存储在 HEADER_FILES 变量中.
SOURCE_GROUP:将不同文件分类整理在一个文件夹中显示,
SOURCE_GROUP("Header Files" FILES ${HEADER_FILES}):将变量HEADER_FILES里面的文件,
显示的时候都显示在“Header Files”选项下面。
include_directories:用于指定包含头文件目录。应该在add_executable或add_library之前使用
include_directories(${TRT_INCLUDE_DIRS})
link_directories: 添加链接库,添加路径使链接器应在其中搜索库。
link_directories(${TRT_LIB_DIRS})
add_library(<name> [STATIC | SHARED | MODULE] [EXCLUDE_FROM_ALL] source1 [source2 ...])
name 表示库文件的名称,可以包含路径信息;
STATIC、SHARED 和 MODULE 表示库文件的类型,分别表示静态库、动态库和可加载模块;
EXCLUDE_FROM_ALL 表示该库不会被默认构建,需要手动指定构建。
source1 表示要添加的原文件
add_library(AI SHARED ${PROJECT_SOURCES})是编译${PROJECT_SOURCES}中的文件,并生成静态库文件。
target_link_libraries() 函数用于将一个或多个库文件链接到目标可执行文件或库文件中。
它的作用是将库文件与目标文件进行链接,使得目标文件可以使用库文件中定义的函数和变量。
target_link_libraries(<target> [PRIVATE | PUBLIC | INTERFACE] <library> [<library2> ...])
target 表示要链接库文件的目标文件(可执行文件或库文件);
PRIVATE 表示链接库文件时只在当前目标中使用;
PUBLIC 链接库文件时既在当前目标中使用也在该目标的依赖目标中使用,链接属性默认为 PUBLIC;
INTERFACE 仅在该目标的依赖目标中使用;
library 表示要链接的库文件的名称
target_link_libraries(AI PUBLIC ${OpenCV_Debug_LIBS}) 将opencv库文件链接到cmake项目AI中
综合例子:将 mylib 静态库文件链接到 myapp 可执行文件中:
add_executable(myapp main.cpp)
add_library(mylib STATIC mylib.cpp)
target_link_libraries(myapp mylib)
set_target_properties(target1 target2 ...PROPERTIES prop1 value1 prop2 value2 ... )
这个命令是设置目标的属性,该命令的语法是列出想要更改的所有目标,然后提供接下来想要设置的值。
set_target_properties(AI PROPERTIES MACOSX_BUNDLE_GUI_IDENTIFIER my.example.com)
CMake里面包含大量的内置变量,和自定义的变量相同,常用的有以下:
CMAKE_C_COMPILER:指定C编译器
CMAKE_CXX_COMPILER:指定C++编译器
EXECUTABLE_OUTPUT_PATH:指定可执行文件的存放路径
LIBRARY_OUTPUT_PATH:指定库文件的放置路径
CMAKE_CURRENT_SOURCE_DIR:当前处理的CMakeLists.txt所在的路径
CMAKE_BUILD_TYPE:控制构建的时候是Debug还是Release
命令:set(CMAKE_BUILD_TYPE Debug)
CMAKE_SOURCR_DIR:无论外部构建还是内部构建,都指的是工程的顶层目录(参考project命令执行之后,生成的_SOURCR_DIR以及CMake预定义的变量PROJECT_SOURCE_DIR)
CMAKE_BINARY_DIR:内部构建指的是工程顶层目录,外部构建指的是工程发生编译的目录(参考project命令执行之后,生成的_BINARY_DIR以及CMake预定义的变量PROJECT_BINARY_DIR)
CMAKE_CURRENT_LIST_LINE:输出这个内置变量所在的行
CMAKE_LIBRARY_OUTPUT_DIRECTORY:该变量用于指定库文件生成的目录。
CMAKE_RUNTIME_OUTPUT_DIRECTORY:该变量用于指定可执行文件生成的目录。