首页 > 编程语言 >CMake-正规程序编译

CMake-正规程序编译

时间:2024-08-13 11:07:51浏览次数:9  
标签:src CMakeLists CMake 正规 编译 文件夹 build include

正规组织结构下编译

正规组织结构 指的是文件组织结构规范工整。一般情况下分为bin build include src lib这些文件夹。例如在写使用线程进行tcp连接的demo中,组织架构如下:

bin中存放可执行的二进制文件;
build为编译文件夹;
include存放所有的头文件;
lib存放库文件,本文中没有使用;
src存放源文件,所有的.cpp .c文件存放的地方。

使用build文件夹存在编译中间产物的方法可以叫做外部编译:out-of-source

CMakeLists语法说明

CMakeLists需要在各级目录下都有一个,顶层目录下的CMakeLists为主要的编译程序。

# 编译器版本
cmake_minimum_required(VERSION 2.8)

# 项目名
project(demo)

# 设置编译器
SET(CMAKE_CXX_COMPILER "gcc")   

# 设置编译选项,O3优化,多线程
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}  -march=native -O3 -pthread" )

# 增加自文件夹,这里比较重要,
# 程序执行到这里会进入src文件夹中的CMakelists递归调用
add_subdirectory(src)
  • set 设置变量名
  • 命令大小写无关,变量大小写相关,使用统一风格即可,ROS中为小写

在src文件夹下的CMakeLists.txt:


# 将.文件夹下的所有源文件加入 SRC_LIST变量中
aux_source_directory(. SRC_LIST)

# 添加头文件的位置
include_directories(${PROJECT_SOURCE_DIR}/include)

# 编译可执行文件
add_executable(main ${SRC_LIST})

# 多线程中需要使用
target_link_libraries(main pthread)

# 设置可执行文件输出目录,非必须
set(EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin)

编译

进入build文件夹

cmake ..
make

这个..指代父目录,实际上build文件夹可以创建在任意位置,cmake时指定CMake工程所在的文件夹即可

标签:src,CMakeLists,CMake,正规,编译,文件夹,build,include
From: https://www.cnblogs.com/firestone/p/18356446

相关文章

  • Makefile 编译多级目录多个目标文件模板
    对于当前目录结构下的Makefile(基于图书管理系统).├──Makefile├──README.md├──bin│├──adminsys│└──usersys├──build│├──adminmain.o│├──generalcore.o│├──generalimpl.o│├──generalview.o│├──......
  • 【ZYNQ MPSoC开发】PL使用自定义IP后Vitis编译报错的解决方法
    问题发现:    在使用Alinx的AXU3EG开发板学习自定义IP时,发现PWM控制呼吸灯频率实验中,由于在PL端使用了自定义IP,Vitis编译PS端程序时会报错。问题所在:    这个问题并不是一个bug,而是官方希望使用者自行为自定义IP编写驱动和Makefile。虽然灵活性增加了,但同......
  • Java学习笔记3--java编译和运行的CMD命令
    windows下利用cmd命令行可以调用jdk里的javac.exe和java.exe对java文件进行编译和执行,前提是jdk已成功安装并正确配置相关环境变量执行命令解析:javac命令用于将java源文件编译为class字节码文件,如:javacHelloWorld.java。运行javac命令后,如果成功编译没有错误的话,会出现......
  • 在clion IDE中编写ADI CCES的工程代码,cmake设置
    有时需要在CCES中编译代码,或者在stm32的mdk或者stm32cubeide中编译,但是习惯了在clion中编写代码,但是clion中需要CMAKES设置,所以需要自己写一个cmake文件,下面是一个模板文件cmake_minimum_required(VERSION3.24)project(proj_name)#add_definitions(-DCORE0-D_DEBUG-DAD......
  • centos7 编译 Qt5.11.3
    默认环境gcc4.8.520150623qt5.9.7kernel3.10.0GNUlibc2.17更换系统源,在2024年6月30后停止更新维护,默认源不可用mvCentOS-Base.repoCentOS-Base.repo.backupwget-OCentOS-Base.repohttp://mirrors.cloud.tencent.com/repo/centos7_base.repowget-Oepel.repo......
  • C语言编译和链接超详解
    文章目录1.翻译环境和运行环境2.翻译环境2.1预处理(预编译)2.2编译2.2.1词法分析2.2.2语法分析2.2.3语义分析2.3汇编2.4链接3.运行环境1.翻译环境和运行环境在ANSIC的任何一种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代......
  • windows开发工具说明:链接器link.exe 编译器cl.exe 资源编译器rc.exe
    路径说明C:\ProgramFiles(x86)\MicrosoftVisualStudio14.0\VC\bin这个路径指向的是MicrosoftVisualStudio2015(版本14.0)中包含的C++编译器及其相关的工具。这些工具包括编译器本身、链接器、资源编译器以及其他用于构建C++应用程序的实用程序。通常,这个目录下的......
  • cmake里常见有关输出路径的变量
    参考资料[cmake-variables](cmake-variables(7)—CMake3.30.2Documentation)常见有关输出路径的变量变量(均可跟_来区分Debug和Release)Windows其他操作系统CMAKE_ARCHIVE_OUTPUT_DIRECTORY静态库.lib文件待补充CMAKE_RUNTIME_OUTPUT_DIRECTORY动态库.dll......
  • Linux:@2024-08-11 最新的Openssl-3.3.1 Openssh-9.8p1 Centos7上的编译后二进制 一键
     附件:Portable_Openssl-Openssh9.8p1-bin-el7.v1.4.1.tgz.zip 特点:适用于centos7.x 已经编译为二进制对老版本的关键二进制文件sshd、sftp、scp、openssl进行了备份升级前,自动打开一个端口为2222的老版本的sshd服务,你可以连接那个2222的服务,以防死翘翘。对sshd_confi......
  • 预编译安装zabbix-agent
    预编译安装zabbix-agent1.zabbix-gaent介绍和工作原理1.1介绍zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。z......