CMakeLists.txt的简单使用

2023-05-16

  • Makefile和CMakeLists的关系

环境准备:需要安装gcc,g++,make

sudo apt-get install gcc g++
sudo apt-get isntall make
  • 1.首先在test文件夹下新建如下内容

  • 2.hello.c文件的内容如下
#include"stdio.h"
void main(void)
{
    printf("hello world\r\n");
    while(1);
}
  • 3.cmakeLists的内容如下
PROJECT(test)                           #工程名
CMAKE_MINIMUM_REQUIRED(VERSION 2.6)     #需要的最低版本
#AUX_SOURCE_DIRECTORY(. DIR_SRCS)        #AUX_SOURCE_DIRECTORY(<dir> <variables>)  将dir目录下源文件名赋值给variables变量
ADD_EXECUTABLE(main hello.c)        #编译hello.c,生成一个main的可执行文件 
  • 4.然后在build文件夹下cmake ..  和 make 最后执行 ./main 

  • 一些常见的cmakelists的文件参数写法
  1. 使用include_directories()                                                           #包含头文件目录
  2. set(SOURCES src/mainapp.cpp src/Student.cpp)                    #设置SOURECE变量 ==  src/mainapp.cpp  src/Student.cpp
  3. add_library(testStudent SHARED ${SOURCES})                     #根据SOURCES变量所含的C文件来生成库文件testStudent,最后名为libtestStudent.so ,这句话也带有编译的功能
  4. add_library(testStudent STATIC ${SOURCES})                        #根据SOURCES变量所含的C文件来生成库文件testStudent,最后名为libtestStudent.a ,这句话也带有编译的功能
  5. install(TARGETS testStudent DESTINATION /usr/lib)               #当执行make install 将会把生成的库文件testStudent放到/usr/lib文件夹下
  6. add_executable(hello helloworld.cpp)                                        #将源文件helloworld.cpp生成可执行文件hello
  7. MESSAGE("${CMAKE_CURRENT_SOURCE_DIR}")              #打印CMakeLists.txt文件所在路径 ---打印变量 CMAKE_CURRENT_SOURCE_DIR 
  8. add_executable(TestAdd main.cpp lib/add.cpp include/add.h)  #编译main.cpp,需要调用add.cpp和add.h的函数,从而生成可执行文件 TestAdd
  9. if ("$ENV{QNX_HOST}" STREQUAL " test_str")                       #如果两个字符串"$ENV{QNX_HOST}" 和 " test_str"相等返回TRUE     
  10. set( ENV{PATH} /home/martink )                                               #设置环境变量PATH值为 /home/martink
  11. link_directories(

    /*库文件路径*/

    )

  12. set ( PROJECT_LINK_LIBS libtestStudent.so )

    #set ( PROJECT_LINK_LIBS libtestStudent.a )

    target_link_libraries(libtest ${PROJECT_LINK_LIBS} )   #生成的libtest需要链接库PROJECT_LINK_LIBS(包含libtestStudent.so)

  13. aux_source_directory

aux_source_directory(./test  CODE_SRC)

查找test目录下的所有文件,且命名为CODE_SRC。 使用: ${CODE_SRC}

  • 编译test.cpp生成testStudent.so

cmake_minimum_required(VERSION 3.10)

project (HELLO)

set(SOURCES test.cpp)
add_library(testStudent SHARED ${SOURCES}) 
  • #链接libtestStudent.so生成可执行文件main
     
cmake_minimum_required(VERSION 2.8.9)
 
#For the shared library:
set ( PROJECT_LINK_LIBS libtestStudent.so )  
link_directories( ~/Desktop/hello/build )  #.so文件路径

add_executable(main main.cpp)  #main.cpp编译生成可执行文件 main
target_link_libraries(main ${PROJECT_LINK_LIBS} )  #main需要链接libtestStudent.so
  •  编译生成可执行文件和so
cmake_minimum_required(VERSION 2.8.9)

link_directories(
     ~/Desktop/hello/build 
)                          #设置要链接的库的文件路径

include_directories(
    ~/Desktop/hello/Test  #test.h的位置
)

#编译Test.cpp生成 libTestStudent.so 
set(SOURCES_test Test/test.cpp)
add_library(testStudent SHARED ${SOURCES_test}) 

set ( PROJECT_LINK_LIBS libtestStudent.so )  #设置将要链接的库名

add_executable(main main.cpp)
target_link_libraries(main ${PROJECT_LINK_LIBS} )  #链接libtestStudent.so编译main.cpp生成可执行文件main。输入./main即可执行

set(SOURCES main.cpp)   
add_library(main_out SHARED ${SOURCES})   #编译main.cpp生成libmain_out.so

  1. #SET(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../bin)       #设置可执行文件的输出目录
  2. #SET(LIBRARY_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/../lib)           #设置库文件的输出目录
     
  • 编译生成libtest.a
list(APPEND GAME_SOURCE
        Classes/AppDelegate.cpp
        Classes/Hello.cpp
     )

list(APPEND GAME_SOURCE
        proj.qnx/main.cpp
     )


set(all_code_files
    ${GAME_HEADER}
    ${GAME_SOURCE}
    )

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

CMakeLists.txt的简单使用 的相关文章

随机推荐

  • Inter RealSenseT265测试总结

    1 光线对定位有影响 xff0c 在一定范围内 xff0c 光线越充足 xff0c 定位精度越高 xff0c 但是当光线达到一定条件之后 xff0c 光照强度就不再跟定位精度成正比了 xff1b 2 周围环境对定位有影响 xff0c 周围的
  • 论文小技巧

    文件 选项 LM3405AXMKE NOPB與LM3405AXMK NOPB LM3405AXMKX NOPB對比 激光二极管 期刊查询 在word里面插入图片时怎样才成是100 比例的 文献 封装与功率 高手支招 xff1a 教你利用裸露
  • 激光啄木鸟使用教程

    软件下载地址 1 红色方框内的按钮长按开机 2 红色方框内的按钮轻触自动对焦 3 打开手机APP选择要雕刻的素材 4 设置要雕刻区域的大小 xff0c 开始预览可以查看雕刻的位置 5 打开蓝牙 xff0c 点击连接设备 6 选择被雕刻物件的
  • STM32 HAL库

    STM32 HAL库 第三章 MDK5 软件入门bug解决关键文件介绍程序仿真User Keywords语法提示代码编辑 查看技巧 第四章 STM32F1 基础知识入门MDK 下 C 语言基础复习STM32F103 时钟系统STM32F10
  • LWIP网络-基于STM32平台

    LWIP P1无操作系统移植RAW UDP实验RAW TCP实验Webserver实验 P1无操作系统移植 MAC 43 PHY 通过符合 IEEE802 3的MII和RMII接口与外接快速以太网PHY进行通信 MII和RMII实现数据交换
  • 树莓派学习

    树莓派学习教程 系统安装数据源的更新与配置命令设定固定IP网络地址 xff1a 法一法二 给树莓派安装中文环境和中文输入法远程控制树莓派SSH方式 xff1a 通过putty软件实现 xff08 不需要屏幕 xff09 VNC方式 xff0
  • C++学习教程

    C 43 43 学习教程 C 43 43 内存分区模型数据类型循环语句for循环语句 跳转语句指针指针 数组 函数 结构体指针 内存分区模型 工具vs codeDEV C 43 43 C 43 43 内存分区模型 程序运行前 全局区和代码区
  • core dumped ?完了?

    微信公众号 xff1a linux码头 core dumped xff1a 当程序在运行过程中发生异常 xff0c 这时linux系统可以把程序出错的内存 内容存储在一个core文件中 xff0c 又叫核心转存 应用程序在运行过程汇总经常会
  • Ubuntu18.04安装网络调试助手 NetAssist

    下载地址 链接 xff1a https pan baidu com s 1DUqZBtxFh pGTsRR2kXaPA 提取码 xff1a fp32 安装步骤 1 xff09 建立依赖关系 sudo apt get install f 2
  • C语言中左移(<<)和右移(>>)的理解

    lt lt 左移 xff1a 相当于乘法 a lt lt b 61 a 2 b 举例 xff1a 1 lt lt 5 xff0c 相当于1 2 5 61 32 1 lt lt 0 xff0c 相当于1 2 0 61 1 gt gt 右移 x
  • 《Linux运维总结:firewalld防火墙使用教程》

    文章目录 一 firewalld基础知识1 1 firewalld基本介绍1 2 firewalld与iptables关系与区别1 3 firewalld默认策略1 4 firewalld配置模式1 5 firewalld配置方法1 6 f
  • ROS常用的功能包

    坐标系 坐标变换 xff08 tf xff09 tf功能包提供了一个基于ROS的分布式框架 xff0c 可以随着时间的推移计算多个坐标系的位置 3D可视化工具 xff08 rviz xff09 机器人模型的可视化 图像数据的可视化 地图数据
  • 树莓派4B+Ubuntu 18.04 LTS + 桌面desktop + ros安装@树莓派4B、Ubuntu、desktop、ros

    树莓派4B 43 Ubuntu 18 04 LTS 43 桌面desktop 43 ros安装 64 树莓派4B Ubuntu desktop ros 久违的一篇博客 xff0c 说实话CSDN的编辑器还是用不太习惯 xff0c 记录一下树
  • 云台控制协议总结(VISCA/PELCOD/PELCOP)

  • error: #20: identifier "TIM_TimeBaseInitTypeDef" is undefined

    如果出现多句错误 xff1a identifier 34 34 is undefined 解决问题方法一 xff1a C C 43 43 include paths 把文件路径添加进去 解决问题方法二 xff1a 在stm32f10x co
  • 使用pyqt5实现键盘(含组合键)鼠标事件响应

    使用pyqt5实现键盘 xff08 含组合键 xff09 鼠标事件响应 使用python3 6 xff0c pyqt5 xff0c 在macOS上测试有效 span class hljs keyword import span sys sp
  • 递归思想刷题总结

    核心思想 我们在调用递归函数的时候 xff0c 把递归函数当做普通函数 xff08 黑箱 xff09 来调用 xff0c 即明白该函数的输入输出是什么 xff0c 而不用管此函数内部在做什么 xff08 千万不要跳进去了 xff0c 你脑袋
  • anonymous unions are only supported in --gnu mode, or when enabled with #pragma anon_unions

    在keil工程下移植代码 xff0c 编译出现了这个问题 xff0c 字面上解决办法有 xff1a 1 打开GNU模式 option gt GNU extensions 2 在代码前加上 pragma anon union 就是代表支持匿名
  • 串口的深入理解

    1 串口是如何发送数据的 xff1f 一般说来 xff0c 串口发送数据是往数据寄存器sbuf填写数据 xff0c 一个字节一个字节的写入 xff0c 如果有串口中断 xff0c 那么发送完一个字节的数据 xff0c 就会进入串口中断一次
  • CMakeLists.txt的简单使用

    Makefile和CMakeLists的关系 环境准备 xff1a 需要安装gcc xff0c g 43 43 xff0c make sudo apt get install gcc g 43 43 sudo apt get isntall