cmake常用指令入门

官网cmd介绍:

cmake-commands(7) — CMake 3.22.6 Documentation

CMake中一切都是基于target的,如add_library会产生一个library的target,add_executable会产生一个exe的target。

编写CMakeLists.txt最常用的功能就是调用其他的.h头文件和.so/.a库文件,将.cpp/.c/.cc文件编译成可执行文件或者新的库文件。

外部项目构建(自定义项目)

目录框架:

之后在build文件下执行 cmake ..; make

mi@mi-OptiPlex-7080:~/桌面/test/build$ cmake ..
-- The C compiler identification is GNU 7.5.0
-- The CXX compiler identification is GNU 7.5.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Configuring done
-- Generating done
-- Build files have been written to: /home/mi/桌面/test/build
mi@mi-OptiPlex-7080:~/桌面/test/build$ make
Scanning dependencies of target testdemo
[ 50%] Building CXX object CMakeFiles/testdemo.dir/src/hello.cpp.o
[100%] Linking CXX executable testdemo
[100%] Built target testdemo

然后目录结果如下:

CMakeLists.txt如下

cmake_minimum_required(VERSION 3.10.2) #CMake最低版本号要求
project(testdemo) #设置项目名称
#########
#通过设置CMAKE_BUILD_TYPE 生成debug或者release版本的程序,根据设置的类型,选择**_FLAGS_DEBUG或者**_FLAGS_RELEASE作为编译选项生成Makefile
#set(CMAKE_BUILD_TYPE "Debug")
#set(CMAKE_BUILD_TYPE "Release")
SET(CMAKE_CXX_FLAGS_DEBUG "$ENV{CXXFLAGS} -O0 -Wall -g -ggdb")#编译成debug版本,这些都是gcc的编译选项。-O指定优化等级,-g -ggdb表示带上调试信息
SET(CMAKE_CXX_FLAGS_RELEASE "$ENV{CXXFLAGS} -O3 -Wall")#编译成release版本,-Wall是开启所有编译警告
##################


include_directories (src/) #添加头文件搜索目录
#add_subdirectory(math) #添加子目录,调用子目录的CMakeLists.txt


#可执行文件的路径和名称可以通过RUNTIME_OUTPUT_DIRECTORY和OUTPUT_NAME两个property来控制。这两个属性默认为空。
#set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY "abc/")#自定义可执行文件的路径
#set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME "abcde")#自定义可执行文件名称
#get_target_properties(output-dir ${PROJECT_NAME} RUNTIME_OUTPUT_DIRECTORY)
#get_target_properties(output-name ${PROJECT_NAME} OUTPUT_NAME)#获取系统变量值

message("output-dir:::---${output-dir}")
message("output-name::----${output-name}")#打印变量

#add_custom_target会根据命令的参数生成一个target,这个target相对的可以更定制化一点
add_custom_target(
    print-pwd
    #ALL          #add_custom_target的target则是默认不在all target中。所有在声明target的时候,可以加上ALL,这个target就会加入all target中,否则make之后,是没有任何反应的
    COMMAND "pwd"#COMMAND中的命令和参数是分开的
)

#artget之间可以有依赖关系,A依赖B(A depends on B),意味着A的build,需要基于B 已经build完成。要实现A依赖B,则要在定义A的时候,加上DEPENDS B。
add_custom_target(
    depend-print-pwd
    #ALL
    COMMAND "echo" "depend pwd"
    DEPENDS print-pwd
)

add_executable(${PROJECT_NAME} src/hello.cpp) #产生一个exe的target

#add_library作用就是将指定的源文件生成链接文件,然后添加到工程中去,实际就是产生一个library的target
#add_library(mytestlibhello SHARED  src/hello.cpp) 

#作用主要是指定要链接的库文件的路径,该指令有时候不一定需要。因为find_package和find_library指令可以得到库文件的绝对路径
#link_directories(
#    lib
#)

#target_link_libraries作用为将动态库library链接到目标
#target_link_libraries(${PROJECT_NAME} libmytestlibhello)
#target_link_libraries (${PROJECT_NAME} pthread)
#target_link_libraries (${PROJECT_NAME} log)


install (TARGETS ${PROJECT_NAME} RUNTIME DESTINATION bin)

cmake入门精华专栏:

https://blog.csdn.net/handsomehong/category_10557493.html

cmake使用示例与整理总结 - 百度文库

CMake编译工程/第一个CMakeLists.txt(最详细案例演示)_芯辰大海的博客-CSDN博客_cmakelists.txt 教程

CMakeLists.txt(ROS) - TNTksals - 博客园

静态动态库----CMake学习笔记二 - 知乎

(转)HelloWorld CMake CMake中构建静态库与动态库及其使用 - 莫水千流 - 博客园

【CMake】CMakeLists.txt的超傻瓜手把手教程(附实例源码)_Yngz_Miao的博客-CSDN博客_cmakelists.txt怎么用

======================================================

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值