当前位置:首页 » 编程软件 » ubuntumakefile编译

ubuntumakefile编译

发布时间: 2022-06-21 20:16:14

① ubuntu下gcc编译c语言文件makefile的问题

makefile看起来没什么大问题,你出现的问题是gcc没找到
可以现在shell下面打一个gcc看看,或者gcc --version
确认下是否已经正确安装gcc,且已经把gcc添加到了PATH里面。

② ubuntu下用makefile生成的执行文件如何调试

在Windows下,只需要简单的点击以下make,rebuild即可。而在linux下,这样的IDE环境并没有提供,难道必须每一步都执行一遍吗?比较ok的做法自然是能够利用批处理脚本来进行操作了,这样,只需要修改脚本中需要编译的文件即可。在Linux下,提供了这么一个方便的工具,make。那么接下来我们来利用make进行程序的组织编译吧。
1. 编写tool.h
1
2
3
4
5
6
#ifndef __TOOL_H
#define __TOOL_H

void printInteger(int number);

#endif // end of tool.h
2. 编写tool.c
1
2
3
4
5
6
7
#include "tool.h"
#include "stdio.h"

void printInteger(int number)
{
printf("the number is:%d\n",number);
}
3. 编写main.c
1
2
3
4
5
6
7
8
9
10
11
#include "tool.h"
#include "stdio.h"

int main(int argc, char* argv[])
{
int number;
number=10;
printf("Context-Type:text/html\n\n");
printInteger(number);
return 0;
}
4. 编译链接文件生成可执行文件main
方法1:
命令行中进行编译
4.1.1 编译main.c生成main.o
sudo cc -c main.c
4.1.2 编译tool.c生成tool.o
sudo cc -c tool.c
4.1.3 链接main.o和tool.o生成main可执行文件
sudo cc -o main main.o tool.o
4.1.4 运行main
sudo ./main
方法2:
makefile进行编译链接
4.2.1 编写makefile文件(没有后缀名)
#MakeFile
main: main.o tool.o

main.o: main.c tool.h
cc -c main.c

tool.o: tool.c tool.h
cc -c tool.c

.PHONY:clean
clean:
rm *.o main
4.2.2 运行make进行编译链接
sudo make
4.2.3 运行main

sudo ./main
4.2.4 删除所有.o文件并再次编译

sudo make clean
sudo make

③ ubuntu11.10 makefile编译却说armv4l-unknown-linux-gcc:Command not found 还有个Error 127

没有添加环境变量,找不到你的命令,因为linux命令倒是从/bin /sbin /usr/bin /usr/sbin 四个目录搜索的,如果你安装命令时不是在这几个命令就只能找不到了,惊异export一下,或是修改.bashrc文件。

④ 怎么在ubuntu在编辑makefile文件

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

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

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

[cpp] view
plainprint?

/////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
plainprint?

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
plainprint?

# 这是注释,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
plainprint?

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 是什么

1. 配置系统的基本结构Linux内核的配置系统由三个部分组成,分别是:
1. Makefile:分布在 Linux 内核源代码中的 Makefile,定义 Linux 内核的编译规则;
2. 配置文件(config.in):给用户提供配置选择的功能;
3. 配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows
图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。

这些配置工具都是使用脚本语言,如 Tcl/TK、Perl 编写的(也包含一些用 C 编写的代码)。本文并不是对配置系统本身进行分析,而是介绍如何使用配置系统。所以,除非是配置系统的维护者,一般的内核开发者无须了解它们的原理,只需要知道如何编写
Makefile 和配置文件就可以。所以,在本文中,我们只对 Makefile 和配置文件进行讨论。另外,凡是涉及到与具体 CPU 体系结构相关的内容,我们都以
ARM 为例,这样不仅可以将讨论的问题明确化,而且对内容本身不产生影响。

2. Makefile
2.1 Makefile 概述Makefile
的作用是根据配置的情况,构造出需要编译的源文件列表,然后分别编译,并把目标代码链接到一起,最终形成 Linux 内核二进制文件。

由于 Linux 内核源代码是按照树形结构组织的,所以 Makefile 也被分布在目录树中。Linux 内核中的 Makefile 以及与 Makefile 直接相关的文件有:
1. Makefile:顶层 Makefile,是整个内核配置、编译的总体控制文件。
2. .config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果(如 make config)。
3. archMakefile 还作了扩充。

⑥ 在Ubuntu中用rosmake编译没有可执行文件生成是怎么回事

提示:make:没有什么可以做的为`first'。这个是Makefile的一个提示,出现这个提示是因为你编译出来的可执行文件的时间戳比你的源代码文件的时间戳“迟”,所以make认为你这种情况下没必要编译,因为即使编译了,编出来的东西和现有的可执行文件一样,就是浪费时间了,所以提示没有什么可以做的为`first'。如果你还要编,随便打开源代码的一个文件,保存下,就可以编译了

⑦ 如何使用ubuntu来编译驱动

工具/原料

Ubuntu12.04操作系统和测试驱动程序(beep_arv.c)
方法/步骤

在介绍2种方法前,必须知道的知识点:
1.关联文件Makefile:
Makefile:分布在Linux内核源代码中的Makefile用于定义Linux内核的编译规则;
2.管理文件Kconfig:
给用户提供配置选择的功能;
配置工具:
1)包括配置命令解析器;
2)配置用户界面;menuconfig || xconfig;
3)通过脚本语言编写的;

3.
---tristate 代表三种状态:1.[ ]不选择,2.[*]选择直接编译进内核,加载驱动到内核里,3.[m]动态加载驱动;
---bool 代表两种状态,1.[ ]不选择,2.[*]选择;
---"Mini2440 mole sample"这个是在make menuconfig时刷出的提示字符;
---depends on MACH_MINI2440 这个配置选项出现在make menuconfig菜单栏下,在内核配置中必须选中、MACH_MINI2440;
---default m if MACH_MINI2440 这个如果选中了MACH_MINI2440,默认是手
动加载这个驱动;
help:提示帮助信息;
在了解了基本的知识点,便开始进行第一种添加驱动的方法,本次交流是以beep_arv.c蜂鸣驱动程序为基础的
方法一:
1)进入内核的驱动目录;
#cp beep_arv.c /XXX/.../linux-XXXl/drivers/char
2)进入Kconfig添加驱动信息;
#cd /XXX/linux-XXX/.../drivers/char
#vim Kconfig
添加基本信息:
config BEEP_MINI2440
tristate "---HAH--- BEEP"
default
help
this is test makefile!

3)进入Makefile添加驱动编译信息;
#vim Makefile
添加基本信息:
obj-$(CONFIG-BEEP_MINI2440) +=beep_drv.o

方法一结果:
在--Character devices下就能看到配置信息了;

方法二:
1)进入驱动目录,创建BEED目录;
#cd /XXX/.../linux-XXX/drivers/char
#mkdir beep
2)将beep_arv.c驱动程序复制到新建目录下;
#cp beep_arv.c /XXX/.../linux-XXXl/drivers/char/beep
3)创建Makefile和Kconfig文件
#cd char/beep
#mkdir Makefile Kconfig
#chmod 755 Makefile
#chmod 755 Kconfig

4)进入Kconfig添加驱动信息;
#vim Kconfig
添加基本信息:
config BEEP_MINI2440
tristate "---HAH--- BEEP"
default
help
this is test makefile!

5)进入Makefile添加驱动编译信息;
#vim Makefile
添加基本信息:
obj-$(CONFIG_BEEP_MINI2440) +=beep_drv.o

6)并且要到上一级目录的Makefile和Kconfig添加驱动信息;
#cd ../
#vim Makefile
#vim Kconfig

⑧ 用Ubuntu系统编译时,出现以下问题:make: Makefile.dist: 没有那个文件或目录 请问是什么原因

如下这个例子(3个子目录, 一个Makefile), 子目录的编译顺序由这个Makefile控制. sub_a sub_b sub_c Makefile

⑨ 如何在ubuntu下用makefile开发stm32

在Ubuntu下寻找Nucleo的串口号。
安装常用的串口软件。minicom,putty。
安装st-link在Ubuntu下的驱动程序。包括下载用的st-flash,调试用的st-util。
安装arm-none-eabi-xxx。

使用Makefile进行简单的工程管理。

固件库准备
编写Makefile
编写main函数。
编译,链接,下载

未优化(6372Bytes)
-Os优化(3780Bytes)
-ffunction-sections,-fdata-sections,-Wl,--gc-sections优化(1680Bytes)
-ffunction-sections,-fdata-sections,-Wl,--gc-sections,-Os优化(1348Bytes)

反汇编代码
分析flash.ld链接文件
修改flash.ld,将代码区域更改到RAM中
修改Makefile,生成SRAM中运行的代码。
下载,反汇编验证。
隐含的巨大bug。(中断向量表的问题)

ringbuffer
在中断中使用ringbuffer
使用gdb调试
添加volatile修正代码
修正ringbuffer的无锁实现。

隐含的bug。

热点内容
安卓游戏旧版本从哪个软件下载 发布:2025-05-16 00:00:20 浏览:328
连接聚类算法 发布:2025-05-15 23:55:09 浏览:977
工资算法单休 发布:2025-05-15 23:52:30 浏览:818
超凡先锋配置不行怎么办 发布:2025-05-15 23:27:54 浏览:531
win7取消加密 发布:2025-05-15 23:26:37 浏览:471
不用internet打开ftp 发布:2025-05-15 23:06:00 浏览:153
sql字符串取数字 发布:2025-05-15 22:57:45 浏览:124
推荐编程课 发布:2025-05-15 22:34:12 浏览:618
表拒绝访问 发布:2025-05-15 22:29:37 浏览:978
电脑怎样解压文件 发布:2025-05-15 22:25:32 浏览:439