关于makefile的问题。一个makefile如何生成两个可执行文件。

时间:2020-12-01 12:46:52
test.cgi:cgictest.c cgic.h cgic.c
arm-linux-gcc  cgictest.c cgic.c -o test.cgi
login.cgi:login.c cgic.h cgic.c
arm-linux-gcc  login.c cgic.c -o login.cgi
我写了这样一个makefile,test.cgi成成了,而login.cgi却生成不了,是不是我的写法上有问题?请问应该怎么写????

9 个解决方案

#1


建议看一下Makefile的语法

缺省执行make的时候只会生成第一个Target,即只会执行test.cgi的内容。

通常写一个all的target, 然后包含要编译的两个target即可。

all: test.cgi login.cgi
    
test.cgi:cgictest.c cgic.h cgic.c 
    arm-linux-gcc  cgictest.c cgic.c -o test.cgi 
login.cgi:login.c cgic.h cgic.c 
    arm-linux-gcc  login.c cgic.c -o login.cgi 

#2


谢谢了,主要是没那么多时间去专研。

#3


引用 2 楼 xujianxiang 的回复:
谢谢了,主要是没那么多时间去专研。

没关系,在实践中慢慢琢磨,不明白了就上论坛问问,时间久了,就NB了。

#4


不明LZ在说什么

#5


引用 1 楼 matrix_ji 的回复:
建议看一下Makefile的语法

缺省执行make的时候只会生成第一个Target,即只会执行test.cgi的内容。

通常写一个all的target, 然后包含要编译的两个target即可。

all: test.cgi login.cgi

test.cgi:cgictest.c cgic.h cgic.c
arm-linux-gcc  cgictest.c cgic.c -o test.cgi
login.cgi:login.c cgic.h cgic.c
arm-linux-gcc  login.c cgic.c -o login.cgi


正遇到这个问题,多谢了

#6


赞同二楼的做法,将两个目标执行文件统一作为源文件传递给另外一个总的入口目标文件。

all:test.cgi login.cgi

这样makefile在生成all的时候就会分别去生成test.cgi和login.cgi了

#7


1、两个目录,两个makefile;
2、同1楼;

个人喜欢第一种。。。

---------------------------------------------------------
#
# Makefile -- Master subdir makefile.
#

.PHONY:all
.PHONY:clean


DIRSy =
DIRSy += test
DIRSy += test_file
DIRSy += test_gcc
DIRSy += test_gdb


all:
for i in $(DIRSy) ; do  make -C $$i || exit $? ; done

clean:
-for i in $(DIRSy) ; do \
[ ! -d $$i ] || make -C $$i clean; \
done

#8


生成n个都没有问题,主要是要定义规则。
就从all下手即可。

#9


mark

#1


建议看一下Makefile的语法

缺省执行make的时候只会生成第一个Target,即只会执行test.cgi的内容。

通常写一个all的target, 然后包含要编译的两个target即可。

all: test.cgi login.cgi
    
test.cgi:cgictest.c cgic.h cgic.c 
    arm-linux-gcc  cgictest.c cgic.c -o test.cgi 
login.cgi:login.c cgic.h cgic.c 
    arm-linux-gcc  login.c cgic.c -o login.cgi 

#2


谢谢了,主要是没那么多时间去专研。

#3


引用 2 楼 xujianxiang 的回复:
谢谢了,主要是没那么多时间去专研。

没关系,在实践中慢慢琢磨,不明白了就上论坛问问,时间久了,就NB了。

#4


不明LZ在说什么

#5


引用 1 楼 matrix_ji 的回复:
建议看一下Makefile的语法

缺省执行make的时候只会生成第一个Target,即只会执行test.cgi的内容。

通常写一个all的target, 然后包含要编译的两个target即可。

all: test.cgi login.cgi

test.cgi:cgictest.c cgic.h cgic.c
arm-linux-gcc  cgictest.c cgic.c -o test.cgi
login.cgi:login.c cgic.h cgic.c
arm-linux-gcc  login.c cgic.c -o login.cgi


正遇到这个问题,多谢了

#6


赞同二楼的做法,将两个目标执行文件统一作为源文件传递给另外一个总的入口目标文件。

all:test.cgi login.cgi

这样makefile在生成all的时候就会分别去生成test.cgi和login.cgi了

#7


1、两个目录,两个makefile;
2、同1楼;

个人喜欢第一种。。。

---------------------------------------------------------
#
# Makefile -- Master subdir makefile.
#

.PHONY:all
.PHONY:clean


DIRSy =
DIRSy += test
DIRSy += test_file
DIRSy += test_gcc
DIRSy += test_gdb


all:
for i in $(DIRSy) ; do  make -C $$i || exit $? ; done

clean:
-for i in $(DIRSy) ; do \
[ ! -d $$i ] || make -C $$i clean; \
done

#8


生成n个都没有问题,主要是要定义规则。
就从all下手即可。

#9


mark