Cmake 模板和语法

2023-05-16

开始一直犹豫是不是要学cmake对于一个没有项目驱动的人来数,感觉用不用都可以。我大可用一个简单的Makefile模板来做一些简单的工程阿。或者我还可以用autotools等。

不过既然已经看了一个晚上了,还是把它弄懂点吧,记得曾经用过automake,好像没有弄到自己感觉满意就放下了。现在这个cmake好像简单些,借前人的话说就是用CMAKE本身也是在编程。当反复写了几个helloworld的工程(cmake下)后,发现比人工写 makefile要容易,比autoconfig要快些。 自我感觉专业一点,微笑

├── bin
│   └── main
├── build
├── CMakeLists.txt
├── doc
├── README
└── src
    ├── CMakeLists.txt
    ├── libs
    │   ├── hello.cpp
    │   └── hello.h
    ├── main.cpp
    └── modules

根目录下的CMakeLists.txt:

#项目名称
PROJECT(hello)
#声明要求的最小版本
cmake_minimum_required(VERSION 2.6)

SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")
#添加参与编译的子目录 我理解为:添加下一个CMakeLists.txt
add_subdirectory(src)


src下的

#添加头文件的查找目录 && 在编译参数"-l" ,指定搜索头文件的路径
INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/libs)
SET(SEC_LIST 
    main.cpp
    libs/hello.cpp
)
ADD_EXECUTABLE(main ${SEC_LIST})

#TARGET_LINK_LIBRARIES 用来链接 -l后的文件依赖
#TARGET_LINK_LIBRARIES(CRNode thread)

#EXECUTABLE_OUTPUT_PATH && LIBRARY_OUTPUT_PATH用来指定二进制文件位置和库文件路径,这里不包括中间文件
SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_BINARY_DIR}/bin)

#关于install 请看http://now-code.com/archives/208

这里没有用到静态库和动态库 或是打包.o文件。简单,符合我的水平----不用库。

要专业一点还是写写“库”吧。


├── bin
├── build
├── CMakeLists.txt
├── doc
├── README
└── src
    ├── apps
    │   ├── CMakeLists.txt
    │   └── main.cpp
    ├── CMakeLists.txt
    ├── includes
    │   └── hello.h
    ├── libs
    │   ├── CMakeLists.txt
    │   └── hello.cpp
    └── modules
根目录下:

PROJECT(hello)


cmake_minimum_required(VERSION 2.6)


SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O2")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O2")


add_subdirectory(src)


src->apps 下

 

set(myexe_EXEC_SRCS
    main.cpp
    # 其它cpp文件
    )
#一定要包含main.cpp 包含的"*.h"文件
include_directories(
    ${PROJECT_SOURCE_DIR}/src/includes/
    #${PROJECT_BINARY_DIR}/src/libs/
    #${PROJECT_SOURCE_DIR}/src/libs/markup 
    #${PROJECT_SOURCE_DIR}/src/modules/
    #/opt/Ice/include
)
#库文件路径
link_directories(
/usr/local/lib
#$ENV{ORACLE_HOME}/lib
)

#添加自己生成的动态库/静态库 设置目标所需要的链接库
#link_libraries(myexe markup)
link_libraries(main hellolib)

add_executable(main ${myexe_EXEC_SRCS})
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin/)

#install(TARGETS main RUNTIME DESTINATION bin)



src->libs 的

set(utils_LIB_SRCS
    hello.cpp
    #其它cpp文件
    )

include_directories(
    ${PROJECT_SOURCE_DIR}/src/includes
    #${PROJECT_SOURCE_DIR}/src/libs/markup 
    #${PROJECT_SOURCE_DIR}/src/libs
)

link_directories(
    /usr/local/lib 
    #其它库路径
    )

#link_libraries(utils markup)
#link_libraries(utils uuid)

#生成动态库  静态库则 STATIC
add_library (hellolib SHARED ${utils_LIB_SRCS})
set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/src/libs/)



如果main.cpp找不到 .h,则可能原因是1:没有包含头文件路径。

有了上述基础,应该可以任意做自己的工程目录并且生成makefile拉。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Cmake 模板和语法 的相关文章

随机推荐

  • 2021-01-17 SONiC系统管理12 零接触部署ZTP

    2021 01 16 SONiC系统管理12 零接触部署ZTP SONiC系统管理12 零接触部署ZTP SONiC系统支持基于DHCP协议Option 67的ZTP零接触部署 SONiC系统启动以后 xff0c 系统自动在所有UP起来的端
  • 2021-02-02 SONiC系统管理 18配置文件格式

    SONiC系统管理 18 配置文件格式 前面说到了SONiC系统启动时通过读取初始配置文件的内容来配置系统 xff0c SONiC系统默认初始配置文件的位置在 etc sonic startup config 文件内容再进一步指示各种不同类
  • 2021-02-06 SONiC SAI结构 Adapter&Adapter Host

    SONiC SAI SAI 结构 SAI是SONiC系统最精华的部分 xff0c SAI spec对SAI如何定义的以及SAI如何被SONiC系统初始化和调用有一些具体的介绍 首先还是一个High Level Design的图 xff1a
  • 2021-02-07 SONiC SAI结构2 1D Bridge

    SONiC SAI结构2 1D Bridge 以太网交换流水线结构 SONiC SAI对交换机 路由器的报文处理流程建立了标准化的行为模型 即使不同的交换芯片内部实现报文处理的方式各不相同 xff0c 由于行为模型是报文处理过程的抽象描述
  • 2021-02-21 SONiC SAI结构5 VXLAN

    SONiC SAI结构5 VXLAN VXLAN报文处理模型流水线结构 SONiC SAI支持VXLAN协议 xff0c 具备支持VTEP的能力 根据报文处理功能模型的特点 xff0c 不同的功能块可以好像搭积木一样组合在一起形成新的功能
  • 2021-02-27 SONiC系统管理 21系统运行平台管理

    2021 02 27 SONiC系统管理 21 系统运行平台管理 SONiC系统通过SAI统一了交换芯片的管理 xff0c 为不同厂家的芯片提供了统一的编程接口 虽然交换芯片提供了系统的最关键的报文处理功能 xff0c 但是作为一个需要在实
  • 2021-03-03 SONiC系统管理 23 SONiC与ONIE

    SONiC系统管理 23 SONiC与ONIE 在开发解耦的白盒交换机设备中 xff0c 在硬件开源的基础上 xff0c 控制软件除SONiC以外也有其它NOS的选择 xff0c 如Cumulus Linux Open Network Li
  • 2021-03-20 SONiC 系统管理 28 静态路由配置

    2021 03 20 SONiC 系统管理 28 静态路由配置 SONiC系统支持通过多种方式配置静态路由 xff0c 包括CLI接口 xff0c 基于RESTCONF YANG方式或者gNMI接口的方式 SONiC静态路由支持IPv4和I
  • 2021-04-26 SONiC: 转发和管理平面接口SAI模型

    2021 04 26 SONiC 转发和管理平面接口SAI模型 SAI模型中转发平面和管理平面接口 转发平面和管理平面之间的接口是控制报文从转发平面传递到控制平面CPU处理的接口 对于各种类型的交换机而言 xff0c 大量不同种类的控制报文
  • 阅读qt贪吃蛇代码、学习

    学qt只有两天而已 xff0c 感觉qt真的很好入门 比mfc容易的很多 学习qt短短时间 xff0c 感觉自己可以仿照别人的代码来写些自己的桌面东西了 不过 xff0c 没有驱动 xff0c 只是兴趣的学习下 可能到此为止了 主要收获 x
  • 2021-05-18 SONiC 系统Loopback地址和管理地址配置

    SONiC 系统管理 37 系统Loopback地址和管理地址配置 SONiC系统可以通过CLI和Config DB来配置Loopback地址 CLI的配置命令和Linux系统配置网口的命令相同 admin 64 switch span c
  • 2021-05-22 SONiC 系统配置命令

    2021 05 20 SONiC 系统管理 39 SONiC系统配置命令 config help This command lists all the possible configuration commands at the top l
  • 2021-05-27 SONiC 系统配置显示命令

    2021 05 27 SONiC 系统管理 40 SONiC系统配置显示命令 show help This command displays the full list of show commands available in the s
  • 2021-06-07 SONiC 系统基于优先级的流控PFC配置命令

    2021 06 07 SONiC 系统管理 42 SONiC 系统基于优先级的流控PFC配置命令 IEEE 802 1Qbb定义的基于优先级的流控Asymmetric Priority Flow Control功能可以在端口上为每个不同的优
  • 2021-06-25 SONiC 系统BGP配置命令

    2021 06 25 SONiC 系统BGP配置命令 SONiC系统BGP配置 SONiC系统所默认包含的BGP模块在201811版的SONiC之前是开源的Quagga软件 xff0c 之后改成了更流行的FRR FRR中的Show命令是以
  • 2021年8月14日 七夕节的相遇 SONiC+P4实现

    2021年8月14日 七夕节的相遇 SONiC 43 P4实现 ONF启动了PINS项目 xff0c P4 integrated network stack
  • 2021-08-20 SONiC中的FRR和Zebra

    2021 08 20 SONiC中的FRR和Zebra SONiC中采用FRR和Zebra处理路由协议 以前写过SONiC系统所默认包含的BGP模块在201811版的SONiC之前是开源的Quagga软件 xff0c 之后改成了更流行的FR
  • 2021-08-29 SONiC中基于策略的哈希配置

    SONiC中基于策略的哈希配置 SONiC可以支持对不同类型的报文采取不同的Hash算法 对于多通道 多链路连接的情况 xff0c 如LAG和ECMP的接口上 xff0c 交换机和路由器采用Hash算法对报文中指定的字段进行Hash计算 x
  • 2021-09-19 当SONiC遇到P4之二

    当SONiC遇到P4之二 P4描述SAI 在当SONiC遇到P4中介绍了用P4来实现SAI Model的方式 xff0c 这种方式利用了P4数据平面编程的功能实现了SAI模型 xff0c 将P4和SONiC这两个分别位于网络数据平面和控制平
  • Cmake 模板和语法

    开始一直犹豫是不是要学cmake对于一个没有项目驱动的人来数 xff0c 感觉用不用都可以 我大可用一个简单的Makefile模板来做一些简单的工程阿 或者我还可以用autotools等 不过既然已经看了一个晚上了 xff0c 还是把它弄懂