日期:2014-05-16  浏览次数:20842 次

makefile得到的可执行文件执行什么也没有
写了一个简单的makefile,执行很正常,生成可执行文件。但是这个可执行文件启动什么也没有,就掉了。
不用makefile,用cc编译命令的可执行文件就能很好的执行。高手给看看makefile有什么问题。

我给main函数一开始就printf("begin.....\n\n")

makefile编译生成的可执行文件test执行情况:
[USER]$test
[USER]$ 

cc编译命令直接生成的可执行文件a.out执行情况:
[USER]$a.out
begin.......
cfg=[test.cfg]
1111111111111111
port=4590
222222222222222222
start 2


makefile内容:
LOBJ=cfgFile.o dataContainer.o queue.o receive.o  main.o

all:test
test:$(LOBJ)
        cc -o $@ -lpthread  $(LOBJ)

main.o:main.c
        cc -c -lpthread  main.c

cfgFile.o:cfgFile.c
        cc -c -lpthread  cfgFile.c

dataContainer.o:dataContainer.c
        cc -c -lpthread   dataContainer.c

queue.o:queue.c
        cc -c -lpthread  queue.c

receive.o:receive.c
        cc -c -lpthread  receive.c

#clean:
#       rm *.o


cc命令直接编译:
cc -lpthread  cfgFile.c dataContainer.c queue.c receive.c main.c

------解决方案--------------------
LOBJ=cfgFile.o dataContainer.o queue.o receive.o  main.o

all:test
test:$(LOBJ)
        cc -o $@ $^ -lpthread

main.o:main.c
        cc -c main.c

cfgFile.o:cfgFile.c
        cc -c cfgFile.c

dataContainer.o:dataContainer.c
        cc -c dataContainer.c

queue.o:queue.c
        cc -c queue.c

receive.o:receive.c
        cc -c receive.c

#clean:
#       rm *.o

------解决方案--------------------
LOBJ=cfgFile.o dataContainer.o queue.o receive.o  main.o

all:test
test:$(LOBJ)
        cc -o $@ -lpthread  $(LOBJ)
.c.o:
        cc -c -lpthread $<


你makefile可以简化成这样试试,执行时#./test
------解决方案--------------------
只编译到了.o,没编成可执行文件
------解决方案--------------------
这跟makefile没关,你直接执行test,执行的不是你生成的test,而是执行/usr/bin/test