Makefile编译c / h?

时间:2011-04-09 09:20:42

标签: c makefile compilation

我需要编译一个旧的应用程序,其tarball只包含* .c和* h,即。没有Makefile。根目录包含应用程序,子目录包含应用程序所需的库。

我的make / Makefile知识不是很好,我想知道编译这个应用程序+库最简单的方法是什么。

谢谢。


编辑:使用此脚本......

# cat compile.bash
#!/bin/bash

cd mylib
for cfile in *.c; do
   ofile=$(echo "$cfile" | sed 's#.c$#.so#')
   gcc -shared -c "$cfile" -o "$ofile"
done

cd ..
gcc *.c -I mylib -L mylib -mylib -o myapp

...我注意到mylib /中的每个* .c文件都被编译成一个* .so文件,而不是将每个文件编译成目标文件并构建一个.so文件,我收到大量的警告和错误,例如

unzip.c: In function âunzipâ:
unzip.c:991: warning: format not a string literal and no format arguments

gcc: unrecognized option '-mylib'

file_util.c: In function âfile_moveâ:
file_util.c:98: error: âerrnoâ undeclared (first use in this function)

我不知道如何编译库,然后在没有错误/警告的情况下编译应用程序。

3 个答案:

答案 0 :(得分:1)

编译库:

cd libfoo
for cfile in *.c; do
   ofile=$(echo "$cfile" | sed 's#.c$#.so#')
   gcc -shared -c "$cfile" -o "$ofile"
done

在此之后,你应该在libfoo /中有一个libfoo.so文件。然后,编译程序(不要忘记cd返回):

gcc *.c -I libfoo -L libfoo -lfoo -o application

答案 1 :(得分:1)

无需使用for循环或生成中间目标文件:

 (cd mylib && gcc -shared -fPIC -o libfoo.so *.c) && \
   gcc -Imylib -o app *.c mylib/libfoo.so

答案 2 :(得分:0)

最简单的可能是让IDE为您进行构建。 Netbeans for one将创建一个Makefile,这样您就可以独立于IDE构建项目。