makefile实例(1)-helloworld

简单makefile实例

1,源文件:

main.cpp

#include <stdio.h>

int main()
{
    printf("Hello World\n");
    return 0;
}

2,编写makefile

若使用g++命令编译链接程序,可以:

g++ -o hello main.cpp

g++ [-o main.o] -c main.cpp

g++ -o hello main.o

若使用make命令,则可以这么编写makefile文件(两种写法分别对应了上面说的两条g++命令):

提示:

2.1,makefile的基本格式为“目标:依赖 命令”
一个 makefile 主要含有一系列的规则,如下:
A: B
(tab)<command>
(tab)<command>
重要: 每个命令行前都必须有tab符号
举例来说,一种简单写法如下:
main : main.c
  gcc main.c –o main
在终端执行make命令就可以得到main文件了

2.2, 这里要说明一点的是,clean不是一个文件,它只不过是一个动作名字,其冒号后面为空,make就不会找文件的依赖性,也就不会自动执行其后所定义的命令。

要执行其后的命令,就需要在make 命令后显式指出这个名字。这样我们就可以定义一些与编译无关的命令:打包程序,清理程序等外围操作等。

用".PHONY {目标名}"定义一个伪目标, 用"make {目标名}"执行该伪目标
.PHONY : clean
clean :
@rm -f main *.o
@echo ‘clean‘
此时执行make命令,终端会显示系统执行的每条命令,如果你不想系统显示它执行的命令,在每条命令的前面加上“@”即可。

hello : main.cpp
    g++ main.cpp -o hello
clean:
    rm hello main.o -rf

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

clean:
    rm hello main.o -rf

3,执行make,进行编译链接,

[[email protected] 0-helloworld]#make
g++ -o hello main.o
[[email protected] 0-helloworld]#ll
总用量 20
-rwxr-xr-x 1 root root 6908 11月 26 22:59 hello
-rw-r--r-- 1 root root   72 11月 26 22:10 main.cpp
-rw-r--r-- 1 root root 1472 11月 26 22:35 main.o
-rw-r--r-- 1 root root  144 11月 26 22:51 makefile

4,执行程序

[[email protected] 0-helloworld]#./hello
Hello World

5,清理程序

[[email protected] 0-helloworld]#make clean
rm hello main.o -rf
[[email protected] 0-helloworld]#ll
总用量 8
-rw-r--r-- 1 root root  72 11月 26 22:10 main.cpp
-rw-r--r-- 1 root root 151 11月 26 23:02 makefile
[[email protected] 0-helloworld]#
时间: 2024-10-20 06:41:49

makefile实例(1)-helloworld的相关文章

AutoConf自动生成Makefile(基于helloworld简单例子)

新建一个简单的helloworld工程文件夹,目录结构如下 hello.h代码: #include<stdio.h> void fprint() { printf("hello world!\n"); } hello.c代码: #include"hello.h" int main() { fprint(); return 0; } 利用AutoConf工具套件来自动生成Makefile 1. 进入helloworld/目录,运行autoscan 生成au

Linux下GCC和Makefile实例(从GCC的编译到Makefile的引入)

一.确认已经装好了GCC和Make的软件包 可以使用whereis命令查看: 如果whereis  gcc和whereis  make命令有结果,说明安装了这两个软件,可以继续往下做. 二.使用GCC编译运行一个HelloWorld程序(只涉及单个文件) 可以在任何一个目录编写C程序然后编译运行,我这个实例在自己主目录进行: 然后就进入了编写程序的界面: 按下键盘”i”进入编辑界面,然后输入程序: 按ESC(进入命令行模式),然后输入”:wq”,冒号表示开始输入命令,字母w代表保存文件,字母q代

Ubuntu下比较通用的makefile实例

本文转自http://blog.chinaunix.net/uid-20608849-id-360294.html 笔者在写程序的时候会遇到这样的烦恼:一个项目中可能会有很多个应用程序,而新建一个应用程序则所有的Makefile都要重写一遍,虽然可以部分的粘帖复制,但还是感觉应该找到更好的解决途径:另外当一个应用程序中包含多个文件夹时通常要在每个目录下创建一个Makefile,当有数十个文件夹时,要创建如此多的Makefile也是不胜其烦.那么为什么不用automake呢,诚然,对于一个很大的工

makefile实例(2)-多个文件实例

1,源文件依赖关系 defs.h command.h buffer.h main.cpp * util.cpp * kde.cpp * * command.cpp * * display.cpp * * insert.cpp * * search.cpp * * files.cpp * * * 2, 源文件 因为这里只是想做一下简单测试,所以很多源文件的内容都是空的. [[email protected] 1-makefile]#head *.h ==> buffer.h <== #pragm

Makefile 实例实践

本文为原创文章,转帖需指明该文链接 目录结构如下: comm/inc/apue.h comm/errorhandler.c atexit.c Makefile 文件内容如下: apue.h 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <errno.h> //for definition of erron 5 #include <stdarg.h&

makefile实例(3)-多个文件实例优化

我们先看一下make是如何工作的在默认的方式下,也就是我们只输入make命令.那么,1.make会在当前目录下找名字叫“Makefile”或“makefile”的文件.2.如果找到,它会找文件中的第一个目标文件(target),在上面的例子中,他会找到“edit”这个文件,并把这个文件作为最终的目标文件.3.如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件.4.如果edit所依赖的.o文件也

Makefile实例

A stupid man think himself is clever. A clever think himself is stupid. Make基础 先上脚本: COMPILE = g++ FLAGS = -std=c++11 -g target = epollserver objs = client.o clientmanager.o main.o savetomysql.o threadable.o libs = -L -lpthread -L/usr/lib/x86_64-linu

HelloWorld 模块

helloworld.c 代码 1 #include <linux/init.h> 2 #include <linux/module.h> 3 4 MODULE_LICENSE("Dual BSD/GPL"); 5 6 static int hello_init(void) 7 { 8 printk(KERN_ALERT "Hello world\n"); 9 return 0; 10 } 11 12 static void hello_ex

Contiki 2.7 Makefile 文件(一)

一.主控Makefile 这里以hello-world例子为主线,从其工程Makefile开始,解析整个build过程. (1)CONTIKI_PROJECT = hello-world 定义变量CONTIKI_PROJECT为 hello-world (2)all:  $(CONTIKI_PROJECT) all是第一个目标,也就是默认目标,其为伪目标,依赖于CONTIKI_PROJECT变量定义的文件. 由于默认目标的特性是,总是被执行(除非显式定义了目标),但由于all是伪目标,只是一个标