我需要编译一个旧的应用程序,其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)
我不知道如何编译库,然后在没有错误/警告的情况下编译应用程序。
答案 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构建项目。