Cmake的简单使用 —— 笔记

以下是本人在学习Cmake的一些笔记,各位大佬不要笑话。

#单个文件时

CMAKE_MINIMUM_REQUIRED(VERSION 3.10)            #CMake版本

PROJECT(dome1)              #工程名

ADD_EXECUTABLE(dome1 src.cpp)           #1.可执行文件名,2.源文件


#*************************************************************************#
#多个文件时

CMAKE_MINIMUM_REQUIRED(VERSION 3.10)            #CMake版本

PROJECT(dome2)              #工程名

        #笨方法
ADD_EXECUTABLE(dome2 src1.cpp src2.cpp)           #1.可执行文件名,2.源文件

        #高效方法
AUX_SOURCE_DIRECTORY(./ DIR_SRC)        #将目录下的所有文件放在变量中
ADD_EXECUTABLE(dome2 ${DIR_SRC})        #${}是变量的使用方法


#*************************************************************************#
#多个文件,多个目录时,在每一级目录里面都要有一个CMakeLists.txt逐级往上

#子目录里面的CMakeLists.txt
AUX_SOURCE_DIRECTORY(./ DIR_SRC)        #将目录下的所有文件放在变量中
ADD_LIBRARY(Mylib STATIC ${DIR_SRC})           #1.静态库名,相当于将该目录打包成一个静态库
ADD_LIBRARY(Mylib SHARED ${DIR_SRC})    #1.动态库名,相当于将该目录打包成一个动态库

#主目录里面的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)            #CMake版本

PROJECT(dome3)              #工程名

ADD_SUBDIRECTORY(./mylib)               #假设mylib是一个子目录,添加即可

AUX_SOURCE_DIRECTORY(./ DIR_SRC)        #将目录下的所有文件放在变量中
ADD_EXECUTABLE(dome3 ${DIR_SRC})        #${}是变量的使用方法
        #链接共享库
TARGET_LINK_LIBRARIES(dome3 Mylib)      #1.可执行文件名,2.共享库名不包括后缀


#*************************************************************************#
#同级多目录工程,bulid,mylib,src三个目录分别存放文件

#1.src文件下CMakeLists.txt的编写方式
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib)        #多个路径之间用空格隔开

SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)       #设置输出可执行文件的路径

AUX_SOURCE_DIRECTORY(./ DIR_SRC)        #将目录下的所有文件放在变量中
ADD_EXECUTABLE(dome4 ${DIR_SRC})        #${}是变量的使用方法
        #链接共享库
TARGET_LINK_LIBRARIES(dome4 Mylib)      #1.可执行文件名,2.共享库名不包括后缀

#mylib目录里面的CMakeLists.txt
AUX_SOURCE_DIRECTORY(./ DIR_SRC)        #将目录下的所有文件放在变量中

SET(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib)      #设置库文件的输出路径

ADD_LIBRARY(Mylib STATIC ${DIR_SRC})           #1.静态库名,相当于将该目录打包成一个静态库
ADD_LIBRARY(Mylib SHARED ${DIR_SRC})    #1.动态库名,相当于将该目录打包成一个动态库

#顶级目录里面的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)            #CMake版本

PROJECT(dome3)              #工程名

ADD_SUBDIRECTORY(./mylib)               #假设mylib是一个子目录,添加即可

ADD_SUBDIRECTORY(./src)               #假设mylib是一个子目录,添加即可

#最后在build文件夹中编译使用 cmake .. 表示主CMakeLists.txt文件在上一级目录,然后make即可


#*************************************************************************#
#条件编译,在编译时加如宏定义
#需要先定义  ./config/config.hpp.in
#然后在./src/CMakeLists.txt 书写如下
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)       #设置输出可执行文件的路径

CONFIGURE_FILE(
    "${PROJECT_SOURCE_DIR}/config/config.hpp.in"            #输入文件
    "${PROJECT_SOURCE_DIR}/config/config.hpp"               #输出文件
)

OPTION(                         #初始化 USE_MYMATH 宏为ON(打开)
    USE_MYMATH
    ON
)

IF(USE_MYMATH)                  #当 USE_MYMATH 打开的时候执行以下内容
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/mylib)        #多个路径之间用空格隔开
ENDIF(USE_MYMATH)

AUX_SOURCE_DIRECTORY(./ DIR_SRC)        #将目录下的所有文件放在变量中
ADD_EXECUTABLE(dome5 ${DIR_SRC})        #${}是变量的使用方法
        #链接共享库
TARGET_LINK_LIBRARIES(dome5 Mylib)      #1.可执行文件名,2.共享库名不包括后缀

#然后就是编写config/config.hpp.in文件
#写"#cmakedefine USE_MYMATH"    后面是你在程序中定义的宏,可以在 ccmake .. 交互界面设置该宏是否被打开


在VScode环境下使用Cmake,调试
#顶级目录里面的CMakeLists.txt
CMAKE_MINIMUM_REQUIRED(VERSION 3.10)            #CMake版本

PROJECT(dome3)              #工程名

add_definitions(-std=c++11)
#调试命令
set(CMAKE_BUILD_TYPE "Debug")
set(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -00 -Wall -g -ggdb")
set(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -03 -Wall")

ADD_SUBDIRECTORY(./mylib)               #假设mylib是一个子目录,添加即可

ADD_SUBDIRECTORY(./src)               #假设mylib是一个子目录,添加即可
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值