Linux下多文件的编译

如何在Linux中进行C语言多文件编译 今天写C语言的时候,我突然遇到需要做一个项目.以前没有接触过,通过简单的了解,Windows下可以通过IDE来进行共同编译 vs就是很好的选择. 而我们今天讨论的重点是如何在Linux中进行多文件编译,一般简单的项目会有三个文件 (xxx.c ,xxx.c,xxx.h)其中一个执行程序主要功能,一个描述抽象数据类型的函数,一个进行函数原型的声明,在Linux下,大家都是手动达人,我们在编译的时候 阅读详情

先看一个简单的多文件
test.h

#include <stdio.h>

add.c

#include"tast.h"
int add(int a,int b)
{
    return a+b;
}

main.c

#inlcude "tast.h"
int main()
{
    int a = 3;
    int b = 4;
    printf("sum = %d", add(a,b));
    return 0;
}

编译:

gcc -c add.c -o add.o
gcc -c main.c -o main.o
gcc add.o main.o -o all

执行:

./all

如果我们有很多个.c文件,这个方法就不太好了,这时,我们提出Makefile文件。

Makefile:自动编译。先将每个.c文件的编译过程提前写在Makefile文件中,在运行程序时,系统直接用make命令使文件自动编译,提高效率。

Makefile文件的书写格式:

Linux 下:

vim   Makefile

Makefile文件中:

main:main.o                    //可执行文件main是由目标文件main.o得到。

gcc  main.o  –o  main         //得到过程是将main.o编译成main文件。

main.o:main.c

gcc  -c  main.c  -o  main.o

在Makefile文件中一定要将每一个.c文件按执行顺序先编译成.o文件,再按顺序将.o文件编译成可执行文件。

每次编译过后会产生很多的.o文件,对于程序运行没什么太大意义,反而会占内存,所以我们也可以在Makefile文件中添加清除命令(clean),如:

 .PHONY:clean

 clean:                //删除所有文件类型为.o的文件

 rm  –rf   *.o

一些文件也可用下面符号表示:

$@: 代表规则里面的目标文件。

$<:代表规则当中的第一个依赖文件。

%.c:%.o   所有.c文件全部编译成.o文件

.PHONY:clean

如果有.PHONY:clean,外面也有clean文件,执行make clean时,里面的.o文件会被删除而外面的clean文件还在。确保了外面clean文件的安全性。如果没有.PHONY:clean 语句,外面也没有clean文件时,在执行make clean也会删除.o文件,如果外面有clean,则会报错。

PHONY:目标并非实际的文件名,只是显示在请求时执行命令的名字。有两种理由需要使用PHONY目标:避免和文件名冲突,改善性能。

Makefile:

all: main.o add.o
    gcc main.o add.o -o all
main.o:main.c
    gcc -c main.c -o main.o
add.o:add.c
    gcc -c add.c -o add.o
.PHONY:clean
clean:
    rm -rf *.o

Linux下编译和执行(make:编译, ./all:执行)::

make

./all

make clean
Linux下GNU多文件编译方法 Linux下GNU多文件编译方法1. 准备工作1.1. 安装GNU编译器首先使用以下命令进行更新: apt-get update 然后输入以下命令安装编译环境: apt-get install make gcc g++1.2. 复制文件至指定目录将需要编译的源文件放入指定目录,这里本例涉及到的文件为MatlabEngine.h,MatlabEngine.cpp和main.cpp。放入的目录为/ 阅读详情

相关推荐

Linux-ubuntu下的多文件同时编译

Linux-ubuntu下的多文件编译之makefile

学习-记录-分享创造价值 2349

Linux下vi与vim命令使用与区别

它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vim的这些优势主要体现在以下几个方面:1、多级撤消 我们知道在vi里,按 u只能撤消上次命令,而在vim里可以无限制的撤消。2、易用性vi只能运行于unix中,而vim不仅可以运行于unix,windows ,mac等多操作平台。3、语法加亮 vim可以用不同的颜色来加亮你的代码。4、

小小默:进无止境 4万+

LINUX下多个c程序编译链接的程序

LINUX下多个c程序编译链接的程序,经验证可以执行,并搭配了MAKEFILE文件

【Linux】多文件编译

多文件的编译和写一个makefile

lxylxylxy的博客 1891

Python多进程实战:用BaoStock高效下载股票历史数据的5个优化技巧

本文详细介绍了使用Python多进程技术通过BaoStock高效下载股票历史数据的5个优化技巧。从理解BaoStock的数据获取机制到进程池配置、智能任务分片、异常处理及性能监控,帮助开发者显著提升数据下载效率,特别适合量化交易领域的数据采集需求。

weixin_30369041的博客 455

华为昇腾 910B 实战:DeepSeek-R1 蒸馏模型高效部署与性能调优全解析

本文详细解析了在华为昇腾910B硬件平台上高效部署DeepSeek-R1蒸馏系列模型(14B/32B版本)的完整实战流程。内容涵盖从MindIE环境搭建、镜像获取、模型准备,到服务配置、内存参数调优、性能测试及常见问题排查,为开发者提供了基于昇腾910B进行大模型部署与优化的全链路指南。

weixin_28235513的博客 210

Linux - vi和vim的区别

vim和vi都是Unlx-like系统中的文本编译器,它们在功能上有一些显著的区别。简要来说,vim是vi的增强版,但仍保持与vi的兼容性。

qq_41668395的博客 1202

别急着编译!修复银河麒麟OpenSSH漏洞前,先搞懂ssh、sshd版本与apt仓库的“爱恨情仇”

本文深度解析银河麒麟OpenSSH漏洞(CVE-2023-38408)修复策略,揭示版本差异背后的企业级维护逻辑,提供从APT升级到源码编译的多维度方案评估。特别针对路径隔离方案和离线环境处理给出技术细节,帮助企业制定兼顾安全与稳定的升级决策框架。

weixin_26642481的博客 453

【Linux】linux中vim/vi (linux基本开发工具)

linux中vim/vi (linux基本开发工具)

zxf123567的博客 1640

保姆级教程:在PX4 Gazebo仿真中为Iris无人机挂载Intel D435i深度相机(含完整配置流程)

本文提供在PX4 Gazebo仿真环境中为Iris无人机挂载Intel D435i深度相机的完整配置流程,涵盖环境准备、模型部署、插件安装及调试技巧。通过详细步骤和常见问题解决方案,帮助开发者快速搭建深度相机仿真环境,适用于无人机视觉开发与算法测试。

weixin_28688385的博客 335

汇川EASY521 PLC实战指南:从硬件选型到程序架构与故障排查

可编程逻辑控制器(PLC)是工业自动化系统的核心大脑,其工作原理基于循环扫描机制,持续读取输入、执行用户程序并更新输出。这种确定性控制方式,使其在逻辑控制、顺序控制和运动控制中具有不可替代的技术价值,广泛应用于机械设备、生产线和过程控制等场景。对于汇川EASY521这类紧凑型高性能PLC,其核心优势在于集成了运动控制与丰富通讯接口,为中小型设备提供了高性价比的一站式解决方案。在实际应用中,工程师常需处理如“汇川sv660n”伺服驱动器的集成调试,或利用“hslcommunication”等开源库实现C#上位

weixin_42525264的博客 733

linux多文件编译

学习笔记

wst1529210144的博客 1804

把 ABAP 经验装进 GitHub Copilot 的按需大脑,Agent Skills 如何改变 ABAP 开发

2026 年 8 月,SAP Community 上出现了一次很有代表性的 ABAP 实验。开发者把标准 Flight Model 里的复制成自己的测试类,删除原有 ABAP Unit Test,再让 GitHub Copilot Agent 为方法重新生成测试代码。真正有意思的地方并不是 Copilot 会不会写,而是开发者给 Copilot 准备了两个专门的 Agent Skills,一个负责 ABAP Unit Test 的通用规则,一个负责 ABAP Test Double Framework。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 153

linux多文件编译—makefile

说到linux下多文件编译。大多是c语言,因为linux内核以及许多的自由软件都是c语言编写的。当然还有c++语言,区别就是c语言使用gcc,而c++语言使用g++。那么本文以c语言为例讲解。c++那么就能融汇贯通了将gcc改为g++就好了。 1,单个文件的编译,比如有test.c    直接输入命令 #gcc test.c -o test 执行,直接输入 #./t

2564

下采样优化实战:用ADown显著提升YOLOv11的多尺度特征保持能力

ADown 以“可编程梯度信息+多分支特征融合”打破了传统下采样的性能壁垒,为 YOLOv11 带来了多尺度特征的精准传递能力。从原理到代码集成,本教程已为你铺就了一条“小目标检测精度跃升”的实战路径。现在就动手尝试吧——当你看到模型对极小目标也能精准识别,且特征图细节完整时,你会明白这份技术探索的价值。我很乐意在你实践过程中帮你解决任何问题,让我们一起推动目标检测在下采样领域的边界。

FJN110的博客 421

构建自己的 Qt 插件系统

Qt 本身提供了插件相关的技术,但并没有提供一个通用的插件框架!倘若要开发一个较大的 GUI 应用程序,并希望使其可扩展,那么拥有这样一个插件框架无疑会带来很大的好处。

青春不老,奋斗不止! 2万+

入门级linux下C++的多文件编译

以前都是在windows下学C++,最近转到Linux下学习。留一下自己在学习过程中解决困难的笔记。         在Linux下,如果定义了多个头文件(.h),且里面的方法或函数都上在另外的文件(.cpp)中实现的。当你在另一个包含有主函数的文件(.cpp)中调用这些方法后,在编译的时候,不能像在windows下,只编译包含有主函数的文件(其实是windows中的IDE自己把其它文件也编译了

空字符 1334

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

linux fortran多进程,Linux 下Fortran多文件编译

Linux 下Fortran多文件编译最近需要在Linux系统下编译多个Fortran程序,在网上搜索了一下,但是资料不多,也许因为这个问题比较简单,不值一提,但还是把我知道的写出来,供大家参考:方法一:假如现在有两个Fortran程序fun.f90和main.f90,其中main.f90是主程序,fun.f90是在主程序中调用的子程序,将这两个文件放到一个目录下,使用fortran编译命令,如I...

weixin_33648352的博客 640

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Linux C程序多文件编译

Linux C程序多文件编译

hmh520i的博客 856

Linux多文件编译

根据编译和链接的规则,以及依赖关系。就比如说gcc -c hello.c -o hello,其中要生成的文件hello.i就是目标文件,而它是依赖于hello.c文件生成的,所以hello在这一个过程中是依赖文件。这只是单个文件编译,那么在编译之前所说的test文件包含两个函数,一个头文件和一个主函数,我们也不需要去逐个编译,下面介绍三个自动变量。在windows系统中我们平常使用的都是已经集成化的编译软件,但是大家并不知道c语言在实际的编译过程是怎样的,在Linux系统中写了多个文件是如何进行编译的。

m0_58794310的博客 419

【ubuntu(Linux)安装Vs code并配置c++编译及cmake多文件编译】

从虚拟机ubuntu建立到vscode构建cmake编译环境配置

Tengfei_Y的博客 1万+

Linux Makefile:从基础语法到多文件工程编译

本文介绍了Linux下使用Makefile管理C语言多文件工程的编译流程。从Makefile基础语法入手,通过三个递进版本(基础写法、内置变量优化、自定义变量工程化)逐步提升可维护性。核心内容包括:1) Makefile的"目标-依赖-规则"模型;2) 自动变量($@,$^)和自定义变量的应用;3) 工程编译与清理的完整流程。文章还指出了TAB缩进等常见坑点,并建议了多目录管理、库编译等进阶方向。通过标准化的Makefile编写,开发者能实现高效的一键编译和灵活的工程管理。

weixin_46607526的博客 1014

linux makefile编译多个文件,Linux下C多文件编译Makefile

第一:Makefile文件编写|1.第一个字母大写,其余的都是小写。|2.Makefile关系到了整个工程的编译。|3.可以执行操作系统的命令。|4.其实Makefile的本质是定义了文件之间的依赖性问题。|5.第一个字母大写,其余的都是小写。|make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。第二: 例子1.我们使用gcc来编译多个源文件时...

weixin_39593061的博客 1532

Linux-多文件编译

Linux多文件编译文件的创建文件的编译文件的运行头文件头文件的创建 如果我们需要编译的文件包含其他的文件中的函数的时候,可以用gcc命令实现 文件的创建 创建第一个文件other1.c void welcome() { printf(“Welcome to the world of Linux\n”); } 创建第二个文件other2.c int add(int x, int y) { return x+y; } int sub(int x, int y){ return x-

weixin_46130146的博客 555

linux 编译 多文件 makefile,Linux下makefile多文件编译.doc

Linux下makefile多文件编译第  PAGE \* MERGEFORMAT- 6 - 页 (共 6  页)实 验 报 告【2017-2018学年第5学期】【基本信息】【开课部门】【实验课程】物联网网关技术【设课形式】独立 ?     非独立?□【实验项目】Linux下makefile多文件编译【项目类型】基础? 综合□ 设计□研究创新□ 其它□【项目学时】5【学生姓名】【学  号】【...

weixin_34416115的博客 277

【Linux 多文件编译】gcc_makefile

Linux makefile 掌握GCC多文件编程方法,掌握Makefile基本语法。 1、在$HOME目录下以自己的学号建立文件夹; 使用mkdir filename 命令创建文件 cd filename/ 进入所创文件夹目录下 接下来便可以使用vi 编辑器编辑程序了 2、在该文件夹下利用VI编辑器和GCC编译器完成C语言多文件(大于等于两个文件)编译; 程序编写完毕后到产生结果四步骤: (1) 预处理 (2) 编译 (3) 汇编 (4) 链接 前三个步骤统称为编译 c1.c–&g

weixin_52762273的博客 1287
上一篇: 管道pipe
下一篇: Linux下多文件的编译(2)
EncodedStar
博客等级 码龄10年 2614粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值