centos 如何让这个makefile正常工作?

2fjabf4q  于 2022-11-07  发布在  其他
关注(0)|答案(1)|浏览(144)

我似乎无法让makefile正确运行。我正在按照一个在线Linux教程编译C库。只是寻找它不能正确运行的原因。我得到:

make: libsimple_math.a: Command not found
make:***[all] Error 127.

commands rUN:

gcc -Wall -c simple_math_sqrt.c
gcc -Wall -c simple_math_pow.c
ar libsimple_math.a simple_math_sqrt.o simple_math_pow.o
ranlib libsimple_math.a
gcc -Wall -c mytest.c
gcc -o mytest mytest.o -L. -lsimple_math

收到的错误:

[root@]# make
libsimple_math.a mytest
make: libsimple_math.a: Command not found
make:***[all] Error 127

生成文件:


# Comments start with a # (hash) character like shell scripts.

# Makefile to build libsimple_math.a and mytest program.

# Paul Sheer <psheer@cranzgot.co.za> Sun Mar 19 15:56:08 2000

OBJS    = simple_math_sqrt.o simple_math_pow.o
LIBNAME = simple_math
CFLAGS  = -Wall

all:
        lib$(LIBNAME).a mytest

mytest:
        cp mytest /bin/mytest
        lib$(LIBNAME).a mytest.o
        gcc $(CFLAGS) -o $@ mytest.o -L. -l${LIBNAME}

lib$(LIBNAME).a:
        $(OBJS)
        rm -f $@
        ar rc $@ $(OBJS)
        ranlib $@

.c.o:
        gcc $(CFLAGS) -c -o $*.o $<

clean:
        rm -f *.o *.a mytest
e4eetjau

e4eetjau1#

你的问题就在这一节:

mytest:
        cp mytest /bin/mytest
        lib$(LIBNAME).a mytest.o
        gcc $(CFLAGS) -o $@ mytest.o -L. -l${LIBNAME}

第二个命令行尝试将库作为命令执行,但(幸运的是)失败了。

mytest: lib$(LIBNAME).a mytest.o
        cp mytest /bin/mytest
        gcc $(CFLAGS) -o $@ mytest.o -L. -l${LIBNAME}

我不知道你为什么要把mytest复制到/bin。如果成功了,那就意味着你必须以root的身份运行--不要!这太容易出错了。或者:/bin上的权限已损坏-请修复它们(chmod 755 /bin)。通常,您应该在将新版本复制到目标目录之前构建命令,而不是将旧版本复制到目标目录,然后创建新版本。
我将为库文件名创建一个宏:

LIBFILE = lib${LIBNAME}.a

然后使用来标识库文件名。
您在以下位置也遇到了类似问题(具有类似的修复程序):

lib$(LIBNAME).a:
        $(OBJS)
        rm -f $@
        ar rc $@ $(OBJS)
        ranlib $@

修复:

lib$(LIBNAME).a: $(OBJS)
        rm -f $@
        ar rc $@ $(OBJS)
        ranlib $@

$(LIBFILE): $(OBJS)
        rm -f $@
        ar rc $@ $(OBJS)
        ranlib $@

注意:我还没有尝试过创建或运行问题中提到的makefile,也没有尝试过这个答案中建议的修复。可能还有其他未发现的问题。

相关问题