我需要编译一个旧的应用程序,其tarball只包含* .c和* h,即。没有Makefile。根目录包含应用程序,而子目录包含应用程序所需的库。Makefile来编译c/h?
我的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)
我不知道如何编译库,然后编译应用程序没有错误/警告。
哎哟 - sed的对每个源文件的调用??如果你真的需要设置这个变量,可以尝试'ofile = $ {cfile%.c} .so'这个应该做同样的事情,而不是每次为每个源文件启动另一个进程。 – 2011-04-10 21:02:43