当前位置: 技术问答>linux和unix
请教含多个文件联编的makefile文件写法模板
来源: 互联网 发布时间:2015-03-08
本文导语: 我现在有clib.h,clib.cpp以及含main函数地主文件ctest.cpp3个文件,那么makefile文件怎么写? 最好给个具体的写法,谢谢了 | 设最终目标文件为ctest则: ctest:ctest.o clib.o $(CC) -o ctest.o clib.o ...
我现在有clib.h,clib.cpp以及含main函数地主文件ctest.cpp3个文件,那么makefile文件怎么写?
最好给个具体的写法,谢谢了
最好给个具体的写法,谢谢了
|
设最终目标文件为ctest则:
ctest:ctest.o clib.o
$(CC) -o ctest.o clib.o
ctest.o:ctest.c
$(CC) -c ctest.c
clib.o:clib.cpp clib.h
$(CC) -c clib.c
其中变量CC设成你自己的编译器名称
这样写是可以让人更加一目了然,但其实完全可以不用这么麻烦
OBJ=ctest.o clib.o
CC=cc
ctest:$(OBJ)
$(CC) -o $@ $?
$(OBJ):clib.h
我看你的文件名:clib.c 就猜你是不是想先作个静态链接库文件然后再链接进你的主文件?
如果这样则先用下面的产生一个静态库:
LIB=.....你的静态库路径和名称,如:./libtest.a
$(LIB):$(LIB)(clib.o)
clib.o:clib.c clib.h
具体怎么编译自然又隐含规则帮你实现不用你费神
然后再写一个makefile如下
LIBDRV=......你的lib路径
ctest:ctest.o
$(CC) -L $(LIBDRV) -o $@ $? -l test
应该就可以了
当然生成静态库和可执行文件的编译可以同时写在一个makefile中,我就不多说了。
ctest:ctest.o clib.o
$(CC) -o ctest.o clib.o
ctest.o:ctest.c
$(CC) -c ctest.c
clib.o:clib.cpp clib.h
$(CC) -c clib.c
其中变量CC设成你自己的编译器名称
这样写是可以让人更加一目了然,但其实完全可以不用这么麻烦
OBJ=ctest.o clib.o
CC=cc
ctest:$(OBJ)
$(CC) -o $@ $?
$(OBJ):clib.h
我看你的文件名:clib.c 就猜你是不是想先作个静态链接库文件然后再链接进你的主文件?
如果这样则先用下面的产生一个静态库:
LIB=.....你的静态库路径和名称,如:./libtest.a
$(LIB):$(LIB)(clib.o)
clib.o:clib.c clib.h
具体怎么编译自然又隐含规则帮你实现不用你费神
然后再写一个makefile如下
LIBDRV=......你的lib路径
ctest:ctest.o
$(CC) -L $(LIBDRV) -o $@ $? -l test
应该就可以了
当然生成静态库和可执行文件的编译可以同时写在一个makefile中,我就不多说了。
|
C++=g++
clib.o:clib.cpp clib.h
$(C++) -c clib.cpp
ctest.o:ctest.cpp clib.h
$(C++) -c ctest.cpp
ctest:ctest.o,clib.o
$(C++) -o ctest ctest.o clib.o
clib.o:clib.cpp clib.h
$(C++) -c clib.cpp
ctest.o:ctest.cpp clib.h
$(C++) -c ctest.cpp
ctest:ctest.o,clib.o
$(C++) -o ctest ctest.o clib.o
|
test: ctest.o clib.o
g++ -o ctest.o clib.o
ctest.o: ctest.c clib.h
g++ -c ctest.c
clib.o: clib.c clib.h
g++ -c clib.c
g++ -o ctest.o clib.o
ctest.o: ctest.c clib.h
g++ -c ctest.c
clib.o: clib.c clib.h
g++ -c clib.c
|
ctest: ctest.o clib.o
cc -o ctest.o clib.o
ctest.o: ctest.c clib.h
CC -c ctest.c -o ctest.o
clib.o: clib.c clib.h
CC -c clib.c -o clib.o
cc -o ctest.o clib.o
ctest.o: ctest.c clib.h
CC -c ctest.c -o ctest.o
clib.o: clib.c clib.h
CC -c clib.c -o clib.o