linux下的make命令使用问题
写好的makefile文件以及多个c文件存储在/media/FOREVER/program目录下,在终端输入$make/media/FOREVER/program/Mak...
写好的makefile文件以及多个c文件 存储在 /media/FOREVER/program目录下,
在终端输入 $ make /media/FOREVER/program/Makefile,
输出提示 make: 对“/media/FOREVER/program”无需做任何事。
这是怎么回事呢?
我的Makefile文件内容是:
CC = gcc
INCLUDE = -I/home/zss/hontani/lib/include
LIBDIR = -L/home/zss/hontani/lib/
CFLAGS = -g ${INCLUDE}
LIB = -lnrd -lm
all: Draw
DRAWLINE_OBJ = mainV.o Fleme0.o Fleme1.o Fleme2.o Fleme3.o \
bin1.o srr1.o chain.o clip.o shape1.o shape2.o shape3.o\
asphalt0.o PaintOut1.o deletion.o shape4.o\
indication.o harris.o blockmatching.o pointplot.o \
block_scale.o \
# MyOwnFunction2.o
SUB_OBJ = PickoutFile.o PickoutFileHead.o
.c.o:
${CC} ${CFLAGS} -c $<
clean:
\rm -f ${ANISO_OBJ} ${SUB_OBJ} core ${DRAWLINE_OBJ} *~
Draw: ${DRAWLINE_OBJ} ${SUB_OBJ}
${CC} ${LIBDIR} -o $@ ${DRAWLINE_OBJ} ${SUB_OBJ} ${LIB}
再输入 gcc /media/FOREVER/program/mainV.c ,显示如下:
/media/FOREVER/program/mainV.c: 在函数‘main’中:
/media/FOREVER/program/mainV.c:135:5: 警告:隐式声明与内建函数‘strcpy’不兼容
/tmp/ccvqliY3.o: In function `main':
mainV.c:(.text+0xecd): undefined reference to `BlockMatching'
………………后面类似,省略
collect2: ld 返 展开
在终端输入 $ make /media/FOREVER/program/Makefile,
输出提示 make: 对“/media/FOREVER/program”无需做任何事。
这是怎么回事呢?
我的Makefile文件内容是:
CC = gcc
INCLUDE = -I/home/zss/hontani/lib/include
LIBDIR = -L/home/zss/hontani/lib/
CFLAGS = -g ${INCLUDE}
LIB = -lnrd -lm
all: Draw
DRAWLINE_OBJ = mainV.o Fleme0.o Fleme1.o Fleme2.o Fleme3.o \
bin1.o srr1.o chain.o clip.o shape1.o shape2.o shape3.o\
asphalt0.o PaintOut1.o deletion.o shape4.o\
indication.o harris.o blockmatching.o pointplot.o \
block_scale.o \
# MyOwnFunction2.o
SUB_OBJ = PickoutFile.o PickoutFileHead.o
.c.o:
${CC} ${CFLAGS} -c $<
clean:
\rm -f ${ANISO_OBJ} ${SUB_OBJ} core ${DRAWLINE_OBJ} *~
Draw: ${DRAWLINE_OBJ} ${SUB_OBJ}
${CC} ${LIBDIR} -o $@ ${DRAWLINE_OBJ} ${SUB_OBJ} ${LIB}
再输入 gcc /media/FOREVER/program/mainV.c ,显示如下:
/media/FOREVER/program/mainV.c: 在函数‘main’中:
/media/FOREVER/program/mainV.c:135:5: 警告:隐式声明与内建函数‘strcpy’不兼容
/tmp/ccvqliY3.o: In function `main':
mainV.c:(.text+0xecd): undefined reference to `BlockMatching'
………………后面类似,省略
collect2: ld 返 展开
6个回答
展开全部
打错了罢? 是make && make intall
&& 是 shell 的逻辑 and (和), 如果前面的命令执行失败,(true or flase)
退出状态不是 0 , 就不会执行后面的命令 ,
最后命令的退出状态会在 shell 默认变量 $? 找到, 例
nc10@your-5554c55be4 ~
$ ls
Mail/ doc/ hh* matrix/ sign.dat trash
News/ ee* junk numsorted* socket.awk* ttt.awk*
bin/ ex30.sh* lib/ pp* software/
crack_allword.txt hex2dec.awk lynx.cfg sign tmp/
nc10@your-5554c55be4 ~
$ test -f "pp" && echo "yes, you have it"
yes, you have it
nc10@your-5554c55be4 ~
$ echo $?
0
nc10@your-5554c55be4 ~
$ test -f "lllll" && echo "yes, you have it"
nc10@your-5554c55be4 ~
$ echo $?
1
nc10@your-5554c55be4 ~
$
第二次执行测试文件 lllll,没有这文件, test名令执行失败,
( 条件为假(flase)), 随后的命令就不执行
nc10@your-5554c55be4 ~
$ test -f "lllll" ; echo "yes, you have it"
yes, you have it
nc10@your-5554c55be4 ~
$
分开两个命令,那不管前面执行如何,随后的还是会执行
如果分成两 make ; make install, 那make编译有错误的话,还是会照样
install , 但安装的程序不能用哦.
Is that clear? :)
&& 是 shell 的逻辑 and (和), 如果前面的命令执行失败,(true or flase)
退出状态不是 0 , 就不会执行后面的命令 ,
最后命令的退出状态会在 shell 默认变量 $? 找到, 例
nc10@your-5554c55be4 ~
$ ls
Mail/ doc/ hh* matrix/ sign.dat trash
News/ ee* junk numsorted* socket.awk* ttt.awk*
bin/ ex30.sh* lib/ pp* software/
crack_allword.txt hex2dec.awk lynx.cfg sign tmp/
nc10@your-5554c55be4 ~
$ test -f "pp" && echo "yes, you have it"
yes, you have it
nc10@your-5554c55be4 ~
$ echo $?
0
nc10@your-5554c55be4 ~
$ test -f "lllll" && echo "yes, you have it"
nc10@your-5554c55be4 ~
$ echo $?
1
nc10@your-5554c55be4 ~
$
第二次执行测试文件 lllll,没有这文件, test名令执行失败,
( 条件为假(flase)), 随后的命令就不执行
nc10@your-5554c55be4 ~
$ test -f "lllll" ; echo "yes, you have it"
yes, you have it
nc10@your-5554c55be4 ~
$
分开两个命令,那不管前面执行如何,随后的还是会执行
如果分成两 make ; make install, 那make编译有错误的话,还是会照样
install , 但安装的程序不能用哦.
Is that clear? :)
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
make -f /media/FOREVER/program/Makefile
make默认会在当前文件夹下依次查找GUNmakefile makefile Makefile,如果都没找到就需要你给它指定一个非常规名称的makfile文件,就需要使用-f选项。
make默认会在当前文件夹下依次查找GUNmakefile makefile Makefile,如果都没找到就需要你给它指定一个非常规名称的makfile文件,就需要使用-f选项。
追问
输入之后显示 make: *** 没有规则可以创建“Draw”需要的目标“mainV.o"。停止
追答
block_scale.o \ 最后的“\”去掉, ${CC} ${CFLAGS} -c $< 修改成${CC} ${CFLAGS} -o $@ -c $<,祝你好运!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
好像 只要 cd /media/FOREVER/program/
make
就可以知道搜索makefile
make
就可以知道搜索makefile
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
已经编译过了,你可以先执行一下make clean。
追问
可是我输入make clean,显示make: *** 没有规则可以创建目标“clean”。 停止。
怎么回事?
追答
可能是你的Makefile有问题。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
版本不对,或者编译器坏了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询