怎么在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->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 图形界面...