Cmake入门基础

Cmake

cmake—高级编译配置工具

将多个cpp、hpp文件组合构建为一个大工程的语言。所有操作都是通过编译CmakeLists.txt完成。

project (HELLO)

set(SRC_LIST main.cpp)

message(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})

message(STATUS "This is SOURCE dir "${HELLO_SOURCE_DIR})

add_executable(hello ${SRC_LIST})

Cmake关键字

  • project: 用来指定工程的名字和支持的语言
project (HELLO)   指定了工程的名字,并且支持所有语言
  • set: 显示指定变量的
set(SRC_LIST main.cpp)    #SRC_LIST变量就包含了main.cpp
set(SOURCES
    src/Hello.cpp
    src/main.cpp
)#创建一个变量,名字叫SOURCE。它包含了所有的cpp文件。
  • message :向终端输出用户自定义的信息

信息:

  1. SEND_ERROR,产生错误,生成过程被跳过
  2. SATUS,输出前缀为—的信息
  3. FATAL_ERROR,立即终止所有 cmake 过程
  • add_executable: 生成可执行文件
add_executable(hello_code ${SRC_LIST})     #生成的可执行文件名是hello_code,源文件读取变量SRC_LIST中的内容

add_executable(hello_code main.cpp)

  • target_include_directories: 有其他需要包含的文件夹(文件夹里有头文件)时,可以使用以下命令使编译器知道它们: target_include_directories()。编译此目标时,这将使用-I标志将这些目录添加到编译器中,例如 -I /目录/路径
target_include_directories(hello_code PRIVATE  ${PROJECT_SOURCE_DIR}/include)
  • target_link_libraries: 创建将使用这个库的可执行文件时,必须告知编译器需要用到这个库。 可以使用target_link_library()函数完成此操作。add_executable()连接源文件,target_link_libraries()连接库文件。

    add_executable(hello_binary src/main.cpp)
    
    target_link_libraries(hello_binary PRIVATE hello_library
    )
    

将hello_library链接到hello_binary可执行文件上。

  • add_subdirectory: 这个指令用于向当前工程添加存放源文件的子目录,并可以指定中间二进制和目标二进制存放的位置

add_subdirectory(source_dir [binary_dir] [EXCLUDE_FROM_ALL])

add_subdirectory(src bin):将 src 子目录加入工程并指定编译输出(包含编译中间结果)路径为bin 目录
如果不进行 bin 目录的指定,那么编译结果(包括中间结果)都将存放在build/src 目录
每个目录下都要有一个CMakeLists.txt说明

//目录结构
[root@localhost cmake]# tree
.
├── build
├── CMakeLists.txt
└── src
    ├── CMakeLists.txt
    └── main.cpp

//外层CMakeLists.txt
project(HELLO)
add_subdirectory(src bin)

//src下的CMakeLists.txt
add_executable(hello main.cpp)
更改二进制的保存路径

set 指令重新定义 EXECUTABLE_OUTPUT_PATH 和 LIBRARY_OUTPUT_PATH 变量 来指定最终的目标二进制的位置

set(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) 

cmake指定的变量

变量说明
CMAKE_SOURCE_DIR根目录,工程顶层目录。一般认为是PROJECT_SOURCE_DIR
CMAKE_CURRENT_SOURCE_DIR处理CmakeLists.txt所在的路径
PROJECT_SOURCE_DIR工程顶层目录
CMAKE_BINARY_DIR运行cmake的目录。外部构建就是build目录
CMAKE_CURRENT_BINARY_DIR当前所在的build目录
PROJECT_BINARY_DIR一般认为是CMAKE_BINARY_DIR

Cmake语法

  1. 基本原则
  • 变量使用${}方式取值,但是在 IF 控制语句中是直接使用变量名
  • 指令(参数 1 参数 2…) 参数使用括弧括起,参数之间使用空格或分号分开。 以上面的 add_executable 指令为例,如果存在另外一个 func.cpp 源文件
    add_executable(hello main.cpp func.cpp)或者add_executable(hello main.cpp;func.cpp)
  • 指令是大小写无关的,参数和变量是大小写相关的
  1. set(SRC_LIST main.cpp) 可以写成 set(SRC_LIST “main.cpp”),如果源文件名中含有空格,就必须要加双引号。

    add_executable(hello main) 后缀可以不写,他会自动去找.c和.cpp,最好不要这样写,可能会有这两个文件main.cpp和main

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值