基础语法使用

set

命令格式:

set(<variable> <value>... [PARENT_SCOPE]) #设置普通变量
set(<variable> <value>... CACHE <type> <docstring> [FORCE]) #设置缓存条目
set(ENV{<variable>} [<value>]) #设置环境变量

set命令可以设置普通变量、缓存条目、环境变量三种变量的值,分别对应上述三种命令格式

set最常见的用法就是设置变量,这里主要对设置环境变量的方法进行讲解

cmake_minimum_required(VERSION 3.5)     #设置CMake最小版本
project (hello_cmake)                   #设置工程名
set(SRC hello.cpp)                      #设置环境变量
add_executable(hello_cmake main.cpp ${SRC})    #生成可执行文件

通过设置一个名为SRC 的环境,包含进hello.cpp的目录地址

在生成可执行文件的语句中获取环境变量来连接文件

示例:

在OpenCV无法被正常链接时,就是环境变量没有添加OpenCV_DIR的环境变量

我们可以通过手动设置OpenCV_DIR的环境变量来正常链接OpenCV

set(OpenCV_DIR "E:\\opencv\\mingw_build")

在添加这一语句之后,就可以正常找到OpenCV

message

在CMake中,message函数用于向终端输出信息。

cmake_minimum_required(VERSION 3.5)     #设置CMake最小版本
project (hello_cmake)                   #设置工程名
message("CMake build!")                 #打印信息
add_executable(hello_cmake main.cpp ${SRC})    #生成可执行文件

在加载Cmake文件时,终端上就会输出 CMake build! 的字样

也可以使用message来打印环境变量的值

示例:

message("OpenCV_DIR: ${OpenCV_DIR}")            #打印OpenCV的目录
message("OpenCV version: ${OpenCV_VERSION}")    #打印OpenCV的版本
message(${CMAKE_SOURCE_DIR})                    #打印项目源目录

include_directories

作用:将指定目录添加到编译器的头文件搜索路径之下,指定的目录被解释成当前源码路径的相对路径

命令格式:

include_directories([AFTER|BEFORE] [SYSTEM] dir1 [dir2 ...])

include_directories用于指定包含头文件目录。include_directories函数允许在CMakeLists.txt文件中指定项目的头文件目录,以便在编译过程中能够正确地找到和包含目录中的头文件

参数说明:

  • BEFORE | AFTER:可选参数,它们用于指定包含目录的添加顺序。如果使用AFTER修饰符,那么添加的目录将会放在已有包含目录的后面;如果使用BEFORE修饰符,那么添加的目录将会放在已有包含目录的前面。默认情况下,新的包含目录会放在已有目录的后面
  • SYSTEM:是一个可选的修饰符,用于指定所包含的目录是系统级别的目录。当使用SYSTEM修饰符时,编译器会将这些目录视为系统级别的头文件目录,这意味着编译器不会产生关于这些目录的警告信息

示例:

假设我们的项目依赖一个名为"foo.h"的头文件,该头文件的路径为"/path/to/foo.h"。我们可以使用include_directories命令将该路径添加到编译器的搜索路径中,示例代码如下

cmake_minimum_required(VERSION 3.5)     #设置CMake最小版本
project (hello_cmake)                   #设置工程名
include_directories(/path/to)           #设置目录
add_executable(hello_cmake main.cpp)    #生成可执行文件

target_link_libraries

target_link_libraries是CMake中的一个命令,它用于将一个或多个库文件链接到目标文件中。这个命令可以用于将静态库、动态库、系统库等链接到可执行文件或动态库中,以便在程序运行时使用这些库文件中的函数和变量。通过`target_link_libraries`命令,可以方便地管理程序的依赖关系,使得程序的编译和链接更加简单和可靠

cmake中链接库的顺序是a依赖b,那么b放在a的后面。

例如进程test依赖a库,b库, a库又依赖b 库,那么顺序如下

target_link_libraries(test a;b)

基础示例:

cmake_minimum_required(VERSION 3.5)       #设置CMake最小版本
project (hello_cmake)                     #设置工程名
set(SRC hello.cpp)                        #设置环境变量
add_executable(hello_cmake main.cpp)      #生成可执行文件
target_link_libraries(hello_cmake ${SRC}) #链接库文件

进阶示例:

cmake_minimum_required(VERSION 3.5)

# 设置项目名称
project (third_party_include)
# 使用库文件系统和系统查找boost install
find_package(Boost 1.46.1 REQUIRED COMPONENTS filesystem system)
# 这是第三方库,而不是自己生成的静态动态库

# 检查是否可以找到Boost库
if(Boost_FOUND)
    message ("boost found")
else()
    message (FATAL_ERROR "Cannot find Boost")
endif()

# 生成可执行文件
add_executable(third_party_include main.cpp)

# 链接库文件
target_link_libraries( third_party_include
    PRIVATE
        Boost::filesystem
)

Boost-库名称。 这是用于查找模块文件FindBoost.cmake的一部分

REQUIRED - 告诉模块这是必需的,如果找不到会报错

COMPONENTS - 要查找的库列表。从后面的参数代表的库里找boost

results matching ""

    No results matching ""