Makefile 编写 简易教程 (实例)
2016-07-08 08:48
211 查看
一、文件准备
main.c
#include <stdlib.h>
#include "a.h"
extern void function_two();
extern void function_three();
int main()
{
function_two();
function_three();
exit (EXIT_SUCCESS);
}2.c
/* 2.c */
#include "a.h"
#include "b.h"
void function_two() {
}3.c
/* 3.c */
#include "b.h"
#include "c.h"
void function_three() {
}三个空的头文件 a.h , b.h , c.h
二、 各种编译情况
MakeFile 编译文件 MakeFile:
all: myapp
# Which compiler
CC = gcc
# Where to install
INSTDIR = /usr/local/bin
# Where are include files kept
INCLUDE = .
# Options for development
CFLAGS = -g -Wall -ansi
# Options for release
# CFLAGS = -O -Wall -ansi
myapp: main.o 2.o 3.o
$(CC) -o myapp main.o 2.o 3.o
main.o: main.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
2.o: 2.c a.h b.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o: 3.c b.h c.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
clean:
-rm main.o 2.o 3.o
install: myapp
@if [ -d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR);\
chmod a+x $(INSTDIR)/myapp;\
chmod og-w $(INSTDIR)/myapp;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi
2.c和3.c先编译生成mylib.a ,再和main.c 编译生成 myapp 的MakeFile:
all: myapp
# Which compiler
CC = gcc
# Where to install
INSTDIR = /usr/local/bin
# Where are include files kept
INCLUDE = .
# Options for development
CFLAGS = -g -Wall -ansi
# Options for release
# CFLAGS = -O -Wall -ansi
# Local Libraries
MYLIB = mylib.a
myapp: main.o $(MYLIB)
$(CC) -o myapp main.o $(MYLIB)
$(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o)
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
clean:
-rm main.o 2.o 3.o $(MYLIB)
install: myapp
@if [ -d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR);\
chmod a+x $(INSTDIR)/myapp;\
chmod og-w $(INSTDIR)/myapp;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi
main.c
#include <stdlib.h>
#include "a.h"
extern void function_two();
extern void function_three();
int main()
{
function_two();
function_three();
exit (EXIT_SUCCESS);
}2.c
/* 2.c */
#include "a.h"
#include "b.h"
void function_two() {
}3.c
/* 3.c */
#include "b.h"
#include "c.h"
void function_three() {
}三个空的头文件 a.h , b.h , c.h
二、 各种编译情况
MakeFile 编译文件 MakeFile:
all: myapp
# Which compiler
CC = gcc
# Where to install
INSTDIR = /usr/local/bin
# Where are include files kept
INCLUDE = .
# Options for development
CFLAGS = -g -Wall -ansi
# Options for release
# CFLAGS = -O -Wall -ansi
myapp: main.o 2.o 3.o
$(CC) -o myapp main.o 2.o 3.o
main.o: main.c a.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c main.c
2.o: 2.c a.h b.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 2.c
3.o: 3.c b.h c.h
$(CC) -I$(INCLUDE) $(CFLAGS) -c 3.c
clean:
-rm main.o 2.o 3.o
install: myapp
@if [ -d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR);\
chmod a+x $(INSTDIR)/myapp;\
chmod og-w $(INSTDIR)/myapp;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi
2.c和3.c先编译生成mylib.a ,再和main.c 编译生成 myapp 的MakeFile:
all: myapp
# Which compiler
CC = gcc
# Where to install
INSTDIR = /usr/local/bin
# Where are include files kept
INCLUDE = .
# Options for development
CFLAGS = -g -Wall -ansi
# Options for release
# CFLAGS = -O -Wall -ansi
# Local Libraries
MYLIB = mylib.a
myapp: main.o $(MYLIB)
$(CC) -o myapp main.o $(MYLIB)
$(MYLIB): $(MYLIB)(2.o) $(MYLIB)(3.o)
main.o: main.c a.h
2.o: 2.c a.h b.h
3.o: 3.c b.h c.h
clean:
-rm main.o 2.o 3.o $(MYLIB)
install: myapp
@if [ -d $(INSTDIR) ]; \
then \
cp myapp $(INSTDIR);\
chmod a+x $(INSTDIR)/myapp;\
chmod og-w $(INSTDIR)/myapp;\
echo "Installed in $(INSTDIR)";\
else \
echo "Sorry, $(INSTDIR) does not exist";\
fi
相关文章推荐
- myeclipse8.5 启动时不弹出工作空间的选择,直接进入一个空的工作空间
- Criteria 和 DetachedCriteria的区别与使用
- myeclipse8.5 启动时不弹出工作空间的选择,直接进入一个空的工作空间
- myeclipse8.5 启动时不弹出工作空间的选择,直接进入一个空的工作空间
- myeclipse8.5 启动时不弹出工作空间的选择,直接进入一个空的工作空间
- 把游标说透
- Linux下crontab命令的用法
- DOM之表格与表单基础分享
- 企业使用VMware vSphere进行服务器虚拟化的经验分享
- C++中的单子(最多只能有一个对象)
- C++中的单子(最多只能有一个对象)
- PL/SQL流程控制语句
- AndroidStudio运行模拟器--夜神
- 凸优化 - 1 - 直线和几何体的向量表达
- [Cloud Computing]Mechanisms: Cryptographic Key Management System
- Python案例-网络编程-socket入门-server&client
- Node.js 文件夹目录结构创建实例代码
- java语言常用性能优化技巧
- 把你的旧笔记本变成 Chromebook
- 文本框,下拉框,单选框只读状态属性