makefile cmake

Linux Makefile:使用CMake生成Makefile文件_cmake写makefile 从前面几个case中可以看到,如果不这样做,cmake运行时生成的附带文件就会跟源码文件混在一起,这样会对程序的目录结构造成污染,而在build目录下运行cmake,生成的附带文件就只会待在build目录下,如果我们不想要这些文件了就可以直接清空build目录,非常方便。正规一点来说,一般会把源文件放到src目录下,把头文件放入到include文件下,生成的对象文件放入到build目录下,最终输出的elf文件会放到bin目录下,这样整个结构更加清晰。既然我们已经生成了库,那么就进行链接测试下。 阅读详情
#目录结构
.
├── app
├── include
│   ├── cls_add.h
│   ├── cls_div.h
│   ├── cls_mul.h
│   └── cls_sub.h
├── lib
├── Makefile
├── obj
│   ├── cls_add.o
│   ├── cls_div.o
│   ├── cls_mul.o
│   ├── cls_sub.o
│   └── main.o
└── src
    ├── cls_add.c
    ├── cls_div.c
    ├── cls_mul.c
    ├── cls_sub.c
    └── main.c


#makefile文件1

source = ./src
include = ./include
objc = ./obj

src = $(wildcard $(source)/*.c)
obj = $(patsubst $(source)/%.c, $(objc)/%.o, $(src))

target = app
myArgs = -Wall -g
CC = gcc

ALL:$(target)

# 链接
$(target):$(obj)
	$(CC) $^ -o $@ $(myArgs)

# 预处理 编译 汇编
$(obj):$(objc)/%.o:$(source)/%.c
	$(CC) -c $< -o $@ $(myArgs) -I $(include)

clean:
	-rm -rf $(obj) $(target)

# 伪目标
.PHONY: clean ALL


# makefile文件2

# 定义变量
source = src
include = include
objc = obj

# 查找所有源文件和目标文件
src = $(wildcard $(source)/*.c)
obj = $(patsubst $(source)/%.c, $(objc)/%.o, $(src))

# 定义目标和编译选项
target = app
myArgs = -Wall -g
CC = gcc

# 默认目标
ALL:$(target)

# 链接目标文件生成可执行文件
$(target):$(obj)
	$(CC) $^ -o $@ $(myArgs)

# 编译规则
$(obj):$(objc)/%.o:$(source)/%.c
	$(CC) -c $< -o $@ $(myArgs) -I $(include)

# 清理规则
clean:
	-rm -rf $(obj) $(target)

# 伪目标
.PHONY: clean all


#cmakelists.txt

.
├── CMakeLists.txt
├── include
│   ├── cls_add.h
│   ├── cls_div.h
│   ├── cls_mul.h
│   └── cls_sub.h
├── lib
├── obj
└── src
    ├── cls_add.c
    ├── cls_div.c
    ├── cls_mul.c
    ├── cls_sub.c
    └── main.c

4 directories, 10 files

# CMakeLists.txt

cmake_minimum_required(VERSION 3.15)
project(app_test)

# 指定源文件目录 GLOB 搜索指定目录 GLOB_RECURSE 递归搜索指定目录
file(GLOB SRC ${CMAKE_CURRENT_SOURCE_DIR}/src/*.c)
# aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/src SRC)

# 指定头文件目录
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include)

# 指定库文件生成的路径
set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/lib)
# add_executable(app ${SRC})
add_library(calc STATIC ${SRC})
add_library(calc_s SHARED ${SRC})

#[[
usage:
    mkdir build
    cd build
    cmake ..
    make
]]

用Cmake写Makefile 开始学Linux, 说实话还真的很痛苦 在Linux中写好一个c++程序, 需要两个过程才能形成一个可执行文件: compile和link Compile是编译过程, 也就是把源文件生成一些中间目标文件.obj Link是将这些.obj文件和library file中的.lib文件链接起来,并且生成可执行文件 .a 一般可以自己写makefile文件, 来预设上述过程所需的前 阅读详情

相关推荐

Linux Makefile的认识及CMake的使用

Linux Makefile的认识及CMake的使用

m0_56741902的博客 1202

从Makefile到CMake

本文介绍了从Makefile到CMake的演进过程,重点比较了两者的特点和使用方法。Makefile是直接用于编译的工具,而CMake作为更高层次的配置工具,能够生成Makefile文件。文章详细讲解了Makefile的基础语法、变量使用和自动变量等特性,以及如何通过模式规则实现自动化编译。在CMake部分,系统梳理了CMakeLists.txt的基本结构,包括版本声明、项目设置、编译选项、子目录管理、头文件/库文件链接、可执行文件/库文件的生成规则等核心内容

yuwei021的博客 1115

自组织映射神经网络(SOM)

目录 1 背景:自组织(竞争型)神经网络 2竞争学习的概念与原理 2.1 竞争学习的步骤 2.2 示例 3SOM典型结构 4SOM网的权值调整域 5 SOM Kohonen 学习算法 6 SOM示例 7SOM设计细节 7.1输出层设计 7.2输出层节点排列的设计 7.3 权值初始化问题 7.4学习率的设计 7.5设计拓扑领域 8SOM功能分析 8.1 保序映射 8.2数据压缩 8.3 特征提取 9自组织映射神经网络与K均值算法的区别...

weixin_39910711的博客 1万+

什么是Cmake和Makefile?

目录 1.前言 2.什么是Makefile 3.什么是Cmake 4.Cmake的语法规则 1.前言 在学习视觉SLAM十四讲的时候,对这个Cmake的概念不太清楚(笔者是机械方向转到SLAM这个方向的),在看了很多大神的讲解后,有所收获,写下这篇笔记方便复习(如果写的有什么不对的地方欢迎批评指正),也希望对各位读者有所帮助。在我看到关于Cmake的解释中,有篇文章写的非常通俗易懂,该链接我放在了下方,建议读者可以看看。 什么是Cmakehttps://www.hahack.com/.

m0_63647490的博客 5428

【Unity人物动画】SALSA With RandomEyes (语音生成嘴型/人物说话) 使用

SALSA使用探索 之前做项目时想做人物说话的嘴部动作,因为我们的语音是AI合成的,语音片段很多,如果能根据语音生成嘴部动画,那将极大便利我们的工作。后面是找到了SALSA的这款插件,并摸索出使用方法。 1 插件介绍 官方网站:https://crazyminnowstudio.com/ 一个能做2D纸片人和3D人物模型嘴部和眼睛动画的插件,由两人组成的独立工作室(疯狂米诺工作室)开发。 插件全名为SALSA With RandomEyes,2014年上架Asset Store,目前是已下架,替换为新版本

里约热内驴的博客 1万+

SARscape的DInSAR全流程-以西安市隋大兴唐长安城遗址为例

通过DInSAR对西安市隋大兴唐长安城遗址开展的年度周期性监测,发现成因是地质内部构造断裂带活动所导致的地面产生物理空间上的形变,而地面的沉降与抬升是直接影响城市发展与文化遗产保护最为常见的缓变型不可逆地质灾害。西安市地处汾渭断陷盆地中部,受临潼-长安断裂带影响,导致区域内构造活动较为强烈。由于早年西安市地表水资源匮乏,从上世纪50年代末开始大量开采地下水资源以满足城市人口不断扩张的需求,从而导致地下承压含水层水位急速下降,形成多个局部沉降中心(八里村、西工大、电子城等)。

2301_77687129的博客 5815

Makefile和Cmake

makefile工具可以看成是一个智能的批处理工具,它本身并没有编译和链接的功能,而是用类似于批处理的方式—通过调用makefile文件中用户指定的命令来进行编译和链接的。CMake允许开发者编写一种平台无关的 CMakeList.txt 文件来定制整个编译流程,然后再根据目标用户的平台进一步生成所需的本地化 Makefile 和工程文件,如 Unix 的 Makefile 或 Windows 的 Visual Studio 工程。从而做到“Write once, run everywhere”。

qq_74811378的博客 956

基于DFT的scanshift sdc模板(DFT)

摘要:本文详细介绍了DFT测试模式下的SDC约束方法。

murphyrong的博客 885

cmake和makefile区别

cmake和makefile区别

weixin_38834817的博客 1815

批量读取_MCGS触摸屏如何实现批量读取modbus数据的方法?

前两天,在一个QQ群里,有同行的朋友问,在MCGS中如何实现批量读取数据,因为他当时面临设备,通讯协议才是MODBUS RTU,同时厂家说地址不能分开读,必须是连续的。鉴于他提供的消息是能够设置的地方都试过了。为此,我直接告诉通过脚本,批量读取的方案。那么这个方案究竟如何实现?且看我下面慢慢道来。一、工具1.modsim:仿真PLC或者第三方设备。2.MCGS组态软件3.串口软件:在电脑中生成两不...

weixin_32511509的博客 8160

matlab实现MSK调制解调

文章目录一、要求二、设计三、代码四、结果五、结论 一、要求 画出MSK信号产生的信息、I路、Q路信号对比图以及接收端解调的信息恢复的对比图。 二、设计 1.MSK调制 2.MSK解调 三、代码 clear all;clc; N=20; T=1; fc=10; Fs=100; bitstream=randi([0,1],1,N); bitstream1=2*bitstream-1; b0=1; for i=1:N encode_output(i)=b0*bitstream

Time_book的博客 1万+

CMake 生成makefile 步骤

1、首先创建一个目录下的makefile //main.cpp #include<iostream> using namespace std; int main() { cout<<"Hello word!"<<endl; return 0; } 在main文件所在的目录创建CMakeLists.txt //CMakeLists.txt ...

machuanfei_c的专栏 1万+

ESP32-C3模组上跑通OTA升级(3)

ESP32-C3模组上跑通OTA升级(3)

phmatthaus的专栏 1351

Makefile与CMake

避免 Make 将目标视为同名文件,强制执行命令。三、Makefile和CMake的具体案例。与 Makefile 案例完全相同。二、CMake 核心内容。

m0_74186706的博客 2012

YOLO11改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

yolo11,yolo11改进,yolo11创新,yolo11添加注意力机制

kay_545 1229

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CMake和Makefile关系

Makefile是make工具的输入文件,定义了如何构建项目。它适用于手动编写简单项目的构建规则,但在处理复杂项目时可能较为繁琐。CMake是一个更高级的构建系统生成工具,通过文件描述项目的构建过程,再生成特定平台的构建文件(包括Makefile它提供了更多的高级功能和更好的跨平台支持。简而言之,CMake可以被看作是一个更强大、跨平台的项目构建和管理工具,它能够生成Makefile,同时还能够生成其他类型的构建文件,简化复杂项目的构建和管理。下一篇文章讲解 CMake如何生成makefile文件。

yueyuanhuaqing的专栏 1160

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

使用CMake调用Makefile 项目

使用CMake调用Makefile 项目

探索C++编程的奥秘,分享深入的技术见解和实践,旨在激发读者创造力与解决问题的思维。 3682

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

在 Windows 上使用 CMake 生成 Makefile

当在 Windows 上运行 CMake 命令而不指定生成器时,CMake 会尝试选择一个适用于 Windows 的默认生成器。CMake 可能会生成一个适用于 Visual Studio 的项目文件,而不是 Makefile,正是这个原因导致。这意味着生成的构建文件将是针对 Visual Studio 的,而不是 Makefile。打开终端,并将以下行添加到你的 shell 配置文件中(比如。如果你使用的是 CMake 3.19 或更高版本,你可以使用。或其他兼容的 Makefile 生成器。

cuber膜拜的博客 1862

cmake和makefile区别和cmake指定编译器(cmake -G)

其实很多公司和项目就是直接使用make的,但make代码规则严格,语法过于复杂,在做跨平台和跨编译器时的管理更加复杂,移植到不同环境的成本过大。首先cmake是项目构建生成工具,cmake的代码可以与平台系统和编译器无关。makefile 可以理解为是make工具使用的代码,make读取makefile中的配置信息来实现编译、链接和部署。工具” 只是使用这些工具其实就能够编译出所有的目标,但由于命令过于复杂,编译的流程不好控制。也就是说cmake是用来生成makefile和其他项目生成工具配置的。

老夏课堂-夏曹俊的技术专栏 1万+

Makefile 和 CMake

Makefile 是一种用于,它主要用于 Unix 和类 Unix 系统,如 Linux 和 macOS。💕。🎉Makefile -> Make Tools -> 目标🌸下面是 Makefile 的基本结构。

静谧、淡雅 1810

Makefile 与 CMake 关系指南

Makefile与CMake是C/C++项目构建中的核心工具,二者协同工作形成完整构建链:CMake作为构建生成器,根据CMakeLists.txt生成平台特定的Makefile,再由Makefile指导实际编译过程。Makefile适合小型单一平台项目,语法直接但跨平台性弱;CMake支持跨平台开发,能自动管理依赖并集成测试,适合中大型项目。现代开发推荐组合使用:CMake生成Makefile,再通过make命令编译。

Youngist的博客 1212

Makefile和Cmake的区别和联系

lkkk

Kunfly的博客 1万+

Makefile和cmake学习

这里介绍了Makefile文件和cmake的简单实用

qq_43717446的博客 3057

makefile与cmake的基础使用

讲解makefile和cmake的简单用法

记录一位C++爱好者的笔记 2709

Makefile和CMake

如果把这个目录copy到另外的目录上作为备份,因为这些中间文件和makefile组成的工程指向的路径是原来的目录上,所以当我们修改源文件编译的时候,编译的源文件是原来目录上的源文件。如果没有这个声明,make程序会把clean当做是文件,所以如果存在clean文件的时候,那么运行这个规则的时候就会当做文件存在而不执行命令。file文件系统操作,GLOB是把与模式匹配的文件的文件名加入到变量中,GLOB_RECURSE与GLOB类似,但会在匹配的文件的目录中的子目录递归地把匹配的文件的文件名加入到变量中。..

GAGA__CHEN的专栏 1631

make、makefile、cmake之间的区别与联系

make、makefile、cmake之间的区别与联系 首先说明一下make、makefile、cmake存在的原因 在进行编译时,如果程序只有一个源文件,那么我们可以直接利用gcc命令对其进行编译; 但是,如果程序包含多个源文件的话,用gcc命令对源文件进行逐个编译显然会比较繁琐。尤其是在有大量源文件时,这样繁琐的编译工作很容易会导致混乱; 为了使多个源文件的编译工作更加便捷,就出现了make...

Aiyanghong的博客 6680
上一篇: C++ virtual实现
下一篇: coredump
m_0806
博客等级 码龄7年 25粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值