我需要編譯一箇舊的應用程序,其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