背景:做项目时候用的是android框见下的makefile文件,当时想在ubuntu下自己的cpp文件使用make好用吗?
结果一查,发现GNU自带makefile,语法和android有些差异,估计是android封装了,下面是使用GNU makefile例子,感觉和shell好像.
多路经多文件的没有试,在提供的链接中有相应的案例.
例子1
#linux makefile
CC = g++
SOURCE = operxml.cpp \
XmlHelperOther.cpp \
XmlOperator.cpp \
XmlHelper.cpp
LFLAGS = -g
MODULE = -o OperatorXml
INCLUDE_PATH = -I /usr/include/libxml2/ #包含所用到的库的路径
LDFILELSP = -lxml2 #所用到的库的名字
OperatorXml:
${CC} ${MODULE} ${SOURCE} ${INCLUDE_PATH} ${LDFILELSP} ${LFLAGS}
clean:
rm OperatorXml
找到所在目录:
使用make OperatorXml即可编译出可执行文件
#关于GNU make,如下连接讲的很详细
例子2
#linux makefile
CC = g++
SOURCE = main.cpp \
NMConnectManager.cpp \
LFLAGS = -g
MODULE = -o connectmanager
connectmanager:
${CC} ${MODULE} ${SOURCE} ${LFLAGS}
.PHONY : clean
clean:
-rm connectmanager
找到cpp文件所在目录:
使用make connectmanager即可编译出可执行文件
#在编译时,使用make -s connectmanager则不会输出编译信息,使用make -B connectmanager则会强制编译,不需要make clean
也可以判断下,是否存在该文件,如果有,则rm掉
linux配置程序时,经常需要设置配置文件。程序更新时,配置文件不需要替换,只有第一次部署时才拷贝。
脚本如下:
file = /etc/1.conf
ifeq ($(file), $(wildcard $(file)))
@echo 1.conf exist
else
cp 1.conf $(etc_dir)
endif
#更多了解GNU makefile,编译多个C文件.参考链接:http://blog.csdn.net/ruglcc/article/details/7814546
例子3
foo = $(bar)
bar = $(ugh)
ugh = Huh?
whoami = $(shell whoami)
all:
echo $(foo) #echo $(foo)前面加上@时,则make all时,不会输出变量名字
echo $(whoami)