问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么在ubuntu在编辑makefile文件

发布网友 发布时间:2022-04-26 00:57

我来回答

1个回答

热心网友 时间:2022-06-19 00:30

当我们写的程序文件比较少的时候,敲入gcc
/g++,当你在大型工程中,在一个个编译文件的话,你可能就会很郁闷。linux有一个自带的make命令,它让你的工作省去了很大的力气,但是你要学习如何编写makefile文件。

makefile是一种特殊的文件格式,他将会帮你自动管理你的项目,很强大。

下面通过实例一步步讲解如何使用makefile。下面的四段代码。

[cpp] view
plaincopyprint?

/////main.cpp

#include "functions.h"

int main()

{

print_hello();

cout << endl;

cout << "The factorial of 5 is " << factorial(5) << endl;

return 0;

}

///hello.cpp

#include "functions.h"

void print_hello()

{

cout << "Hello World!";

}

///factorial.cpp

#include "functions.h"

int factorial(int n)

{

if(n!=1)

{ return(n * factorial(n-1)); }

else return 1;

}

//functions.h

void

print_hello();

int factorial(int n);
/////main.cpp

#include "functions.h"

int main()

{

print_hello();

cout << endl;

cout << "The factorial of 5 is " << factorial(5) << endl;

return 0;

}

///hello.cpp

#include "functions.h"

void print_hello()

{

cout << "Hello World!";

}

///factorial.cpp

#include "functions.h"

int factorial(int n)

{

if(n!=1)

{ return(n * factorial(n-1)); }

else return 1;

}

//functions.h

void

print_hello();

int factorial(int n);

请将以上文件放到一个目录下。

请注意: 我用的是g++进行编译的,你也可以按照你自己的选择来编译程序

make的作用

如果你运行: make命令,
它将会自动的在你的目录下寻找makefile文件,然后执行它,如果你几个makefile文件,你可以指定某一个特定的makefile文件
使用如下命令:

make -f mymakefile

如果你想知道更多的make 用法,可以执行man make 命令

执行过程

编译器将会编译你的源文件,然后输出目标文件

链接器执行目标文件然后创建一个可执行文件。

手动编译

最不理想的一种执行方式就是

g++ main.cpp hello.cpp factorial.cpp -o hello

akefile 基本规则

makefile的基本规则是有以下构成:

target: dependencies

[tab] system command

利用以上语法编写如下

all:

g++main.cpp hello.cpp factorial.cpp -o hello

然后运行你的makefile,如下

make -f Makefile-1

如上代码叙述,所写的目标是all,all是makefile默认的目标,如果没有其他规定,make语法将要执行这个目标文件。

我们还发现,all 目标并没有依赖的,所以按照命令让他安全的执行。

最后,make 通过 我们给的命令进行编译程序

使用依赖

这是因为,如果你修改一个单独的文件在你的项目,你不必重新编译一切,只有你修改。 请看下边的例子

[plain] view
plaincopyprint?

all: hello

hello: main.o factorial.o hello.o

g++ main.o factorial.o hello.o -o hello

main.o: main.cpp

g++ -c main.cpp

factorial.o: factorial.cpp

g++ -c factorial.cpp

hello.o: hello.cpp

g++ -c hello.cpp

clean:

rm -rf *o hello
all: hello

hello: main.o factorial.o hello.o
g++ main.o factorial.o hello.o -o hello

main.o: main.cpp
g++ -c main.cpp

factorial.o: factorial.cpp
g++ -c factorial.cpp

hello.o: hello.cpp
g++ -c hello.cpp

clean:
rm -rf *o hello

我们看到目标all
只有依赖,没有系统命令。为了去执行正确,它必须满足所有的目标所依赖的。目标都回去搜索所有的依赖,然后去执行它。

在例子中,我们看到了clean的目标,clean 这个目标就是清楚中间生成的.o文件和那些可执行文件

使用变量和注释

当你写makefil文件的时候,当你想改变一些编译的一些选项的时候,他是非常有用处的。

[plain] view
plaincopyprint?

# 这是注释,CC 编译器.

CC=g++

# CFLAGS 是选项

CFLAGS=-c -Wall

# 目标文件

OBJECTS=main.o factorial.o hello.o

all: hello

hello: $(OBJECTS)

$(CC) main.o factorial.o hello.o -o hello

main.o: main.cpp

$(CC) $(CFLAGS) main.cpp

factorial.o: factorial.cpp

$(CC) $(CFLAGS) factorial.cpp

hello.o: hello.cpp

$(CC) $(CFLAGS) hello.cpp

clean:

rm -rf *o hello
# 这是注释,CC 编译器.
CC=g++
# CFLAGS 是选项
CFLAGS=-c -Wall
# 目标文件
OBJECTS=main.o factorial.o hello.o
all: hello

hello: $(OBJECTS)
$(CC) main.o factorial.o hello.o -o hello

main.o: main.cpp
$(CC) $(CFLAGS) main.cpp

factorial.o: factorial.cpp
$(CC) $(CFLAGS) factorial.cpp

hello.o: hello.cpp
$(CC) $(CFLAGS) hello.cpp

clean:
rm -rf *o hello

你可以看到,使用这些有时候是非常有用的。你可以使用它们,赋值,当你想改变一些变量值的时候,然后你可以使用$(var),

来应用这些变量

如何继续下去

通过以上简要的介绍,你就可以简要的去编写一些更加复杂的makefile来运行你的复杂的程序了。上边讲的只是冰山一角

,你可以通过差一些make的文档来写。

[plain] view
plaincopyprint?

CC=g++

CFLAGS=-c -Wall

LDFLAGS=

SOURCES=main.cpp hello.cpp factorial.cpp

OBJECTS=$(SOURCES:.cpp=.o)

EXECUTABLE=hello

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)

$(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:

$(CC) $(CFLAGS) {1}lt; -o $@

CC=g++
CFLAGS=-c -Wall
LDFLAGS=
SOURCES=main.cpp hello.cpp factorial.cpp
OBJECTS=$(SOURCES:.cpp=.o)
EXECUTABLE=hello

all: $(SOURCES) $(EXECUTABLE)

$(EXECUTABLE): $(OBJECTS)
$(CC) $(LDFLAGS) $(OBJECTS) -o $@

.cpp.o:
$(CC) $(CFLAGS) {1}lt; -o $@

通过以上简要的介绍,你就可以简要的去编写一些更加复杂的makefile来运行你的复杂的程序了。上边讲的只是冰山一角

,你可以通过差一些make的文档来写。
Ubuntu系统下如何运行(运行!!)Makefile文件?

比如你/home/test这个目录下有.c和.h文件,然后你在该目录下,编写了相应的Makefile文件,那你只要打开一个终端,然后输入:cd /home/test make 就可以运行这个Makefile了。

C++ Lesson 5:编译Makefile

第一个complex.hpp中的编辑如下:第二个complex.cpp编辑如下:第三个主函数编辑如下:然后,在ubuntu中创建一个Makefile 文件之间的关系如表 更新代码时,我们主要依照关系,更细相关文件。Makefile编辑如下。注意:每一句的第二行,前面的空格是按一下Tab键,千万不是随机的空格键。否则编译不通过。然后...

如何在ubuntu中安装makefile文件,求详细步骤!

sudo apt-get install libxml2-dev 经过上面包的安装,在次./configure 没有再出现错误,这次成功的生成了makefile 文件。然后执行:make make install 成功安装软件。

LINUX驱动开发:UBUNTU下,比如我写了个.C驱动文件。之后我要把它放在...

方法一:再为该文件写一个Makefile文件,然后在该目录下直接执行 make 命令就可以了,也可以不为其编写Makefile文件,直接运行make相关的命令也可以。其实是等价的。方法二:比较原始的方法,把你写好的驱动程序归类放在内核源文件(/usr/src/linux*/drivers/* )然后修改/usr/src/linux*/drivers/*该...

ubuntu下驱动模块编译 显示 没有规则可以创建目标

ubuntu下驱动模块编译 显示 没有规则可以创建目标 虚拟机下安装的ubuntu12.04交叉编译ARM驱动内核为2.6.38,内核已经执行过make和makemodules_install在ubuntu中提示出错。不知道为什么有这个错误,坐等大神~~Makefile如下:ifneq($(K... 虚拟机下安装的ubuntu 12.04 交叉编译ARM驱动 内核为2.6.38,内核已经执行过make ...

Ubuntu tmake 安装

编译器是根据Makefile文件内容来进行编译的,所以需要生成Makefile文件。Qt提供的tmake工具可以帮助我们从一个工程文件(. pro文件)中产生Makefile文 件。结合当前例子,要从hello. pro生成一个Makefile文件的做法是:首先查看环境变量$TMAKEPATH是否指向PC编译器的配置目录,在命令行下输入以下命令 echo $T...

ubuntu下如何安装cmake

1.首先去官网(https://cmake.org/download/)下载安装包,选择“XX.tar.gz”源码安装包 2.输入如下命令 tar -zxvf xx.tar.gz ./bootstrap make make install 输入以上命令后就已经可以在ubuntu上安装好cmake。编写简单的cmake 使用cmake首先得有个CMakeList.txt文件,你需要把配置信息写在该文件...

LINUX驱动开发: UBUNTU下,比如我写了个.C 驱动文件。 之后我要把它放在...

1,直接添加进内核。a, 比如进入drivers/char/目录,把xxx.c文件拷贝到该目录 b, 修改drivers/char/Kconfig文件,自定义仿照其他选项,添加自己的选项XXX。c, 修改drivers/char/Makefile文件,添加obj-$(CONFIG_XXX) += xxx.o d, 进入内核根目录,make menuconfig,进入device drivers-&gt;character ...

linux ubuntu 系统终端输入make出现如图错误,怎么回事?

cd /home/wjn/下载/test/src/land/level2 make makefile 是make工具调用的,不是可执行的 如果提示没有make 先 apt-get install make 参考资料:blog.xn--9krw63bgon.com

ubuntu 中makefile 是什么?

1. Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则;2. 配置文件(config.in):给用户提供配置选择的功能;3. 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面...

ubuntu怎么编辑文件 ubuntu终端怎么编辑文件 ubuntu为什么无法编辑文件 ubuntu的vim如何编辑文件 ubuntu编辑文件命令 ubuntu编辑文件后如何保存 ubuntu怎么保存文件 ubuntu只读文件怎么修改 ubuntu怎么修改文件内容
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
做了好乱的梦,求解! ae缺少p1效果是要装什么插件? ...荣耀》中“网络诊断”居然可以测定酒店有无摄像头,这是好事吗? 七叶一枝花花苞里面的红米是什么 q了是什么意思? ...Q就可以,格式也没错,也只几十K,别人发给我都可以,哪里出问题了... 显的么说友Q在微 ?Q上新示怎让在说我空里动间的态不更好博 诺诗兰户外品牌怎么样 新隋唐英雄传张卫健萧妃是刘小庆吗 红尖椒和朝天椒介绍!红尖椒和朝天椒哪个辣? ubuntu进入vi编辑模式怎么删除内容? ubuntu进入vi编辑模式怎么删除内容? 怎么在ubuntu 下怎么编程 怎么在ubuntu 下怎么编程 ubuntu编辑文件有哪些命令 ubuntu编辑文件有哪些命令 ubuntu终端中如何编辑.c文件 ubuntu终端中如何编辑.c文件 ubuntu上的视频编辑软件 ubuntu上的视频编辑软件 ubuntu 怎么编辑.sh的文件?要什么编辑器吗? 大家在ubuntu下用什么文本编辑器 怎么在ubuntu 文本编辑器 ubuntu怎么编辑/etc/ld.so.conf ubuntu在终端编辑完配置文件怎么退出 快手互关好友,我把他拉黑了,解除拉黑以后他还是我的粉丝吗? ubuntu16.04 怎么编辑文件 Ubuntu怎么做编辑开始菜单 ubuntu编辑文件后如何保存 白米饭配什么最好吃 “ubuntu”进入vi编辑模式怎么删除内容? “ubuntu”进入vi编辑模式怎么删除内容? 微信如何建小号 微信怎建小号么 猎豹浏览器怎么双击显不出内容? 猎豹浏览器登陆账号之后 就显示不出网页 我的猎豹浏览器无法显示网页 求助 猎豹浏览器有些字显示不出怎么办? 为什么我的猎豹浏览器自从上一次出问题之后无论卸了重装都显示不出主界面只在任务 猎豹浏览器有些字显示不出如何办 猎豹浏览器有些图片显示不出来? 我的猎豹浏览器为什么来时加载失败 首页根本就加载不出来 猎豹浏览器异常,能加载网页,但是显示不出来,浏览器白屏,但是鼠标按下能打开链接,具体问题如下图 猎豹浏览器打开无法显示在桌面屏幕中,只隐藏在右下角 为什么猎豹浏览器电脑上打开老是往左边跑?不显示在中间呢? 猎豹浏览器显示不全问题 猎豹浏览器显示不正常 猎豹浏览器首页显示不正常! 猎豹浏览器怎么总显示错误代码404是什么意思 猎豹浏览器打不开,提示主页崩溃打不开