1

好的,所以我需要为我编写的程序制作一个基本的 Makefile。以下是文件:

list.c
hash.c
order_book.c
libdefault_hash.a //provided already so I do not need to create.

我需要为 list.c 和 hash.c 创建库,以便订单簿在编译时可以使用它们。所以这就是我目前拥有的Makefile

all: orderbook

orderbook: orderbook.c liblist.a libhash.a
    gcc -std=c99 -o orderbook order_book.c list.c -L. -llist -lhash -libdefault_hash

liblist.a: list.c
    gcc -std=c99 -c list.c
    ar rcu liblist.a list.o

libhash.a: hash.c
    gcc -std=c99 -c hash.c
    ar rcu libhash.a hash.o

我对 makefile 如何工作的了解非常少,但这是我的思考过程,

  1. all: orderbook将意味着orderbook:它将运行。

  2. orderbook.c然后将编译,然后代码将编译库。

  3. 编译库后,它将运行:

    gcc -std=c99 -o orderbook order_book.c list.c -L. -llist -lhash -libdefault_hash

结果应该是一个名为 orderbook 的简单程序文件,但终端会打印出:

$ make
gcc -std=c99 -o orderbook order_book.c list.c hash.c -L. -llist -lhash -libdefault_hash
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ld: skipping incompatible ./liblist.a when searching for -llist
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -llist
/usr/lib/gcc/x86_64-pc-linux-gnu/4.6.3/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -libdefault_hash
collect2: ld returned 1 exit status
make: *** [orderbook] Error 1
$

非常感谢任何帮助/指导。

4

1 回答 1

1

让我们一步一步来。首先,这是一系列命令,看起来像您的想法:

gcc -std=c99 -c list.c -o list.o
ar rcu liblist.a list.o
gcc -std=c99 -c hash.c -o hash.o
ar rcu libhash.a hash.o
gcc -std=c99 -o orderbook order_book.c -L. -llist -lhash -libdefault_hash

在没有 Make的情况下尝试这些命令,看看哪些有效(你确定“rcu”不应该是“-rcu”吗?)。通过评论此答案或编辑您的问题告诉我们结果。一旦这些命令中的任何一个起作用,我们就可以开始编写 makefile。

于 2013-10-20T04:59:41.543 回答