2014-02-15 42 views
0

我爲某些c文件製作了makefile。我在網上看到了太多的方法,但我總是遇到同樣的問題:make:`q_a'是最新的。Makefile:...是最新的

q_a: 
gcc -o q_a quick_sort_i.c 

q_g: 
gcc -o q_g quick_sort_g.c 

s_a: 
gcc -o s_a shell_sort_i.c 

s_g: 
gcc -o s_g shell_sort_g.c 

fork: 
gcc -o fork fork.c 

我在我的文件夾中沒有具有相同名稱的文件,當我在終端中寫入時我可以編譯它們。你能幫我嗎?提前致謝!

+0

僅供參考:您是否嘗試過[CMake](http://www.cmake.org/cmake/help/cmake_tutorial.html)?這個工具可以大大簡化你的「Makefiles」。 – yegorich

回答

4

您尚未爲您的目標指定相關性。

做什麼,首先檢查你的目標(q_a)是否作爲一個文件存在,如果它確實存在,如果它的依賴關係比較新(比如,具有更新的修改時間)作爲你的目標。只有當它需要更新(它不存在或依賴關係較新)時,該規則纔會被執行。

這意味着,如果你需要q_aquick_sort_i.c改變時重新編譯,你需要把它作爲一個依賴添加到q_a,像這樣:

q_a: quick_sort_i.c 
    gcc -o q_a quick_sort_i.c 

就這樣,使得在需要的時候重新編譯q_a

+0

我仍然有同樣的問題。我甚至嘗試過: q_a:quick_sort_i.o || \t gcc -o q_a quick_sort_i.o || quick_sort_i.o:quick_sort_i.c || \t gcc -o quick_sort_i.c -c || 我也有同樣的問題。任何其他建議? –

+0

@a_user:看起來你在你建立的目錄中有一個文件q_a。如果沒有,請檢查你的makefile中的規則是否用製表符縮進,如果沒有這些幫助,請嘗試'touch quick_sort_i.c'並且再次運行make。至少其中一個應該起作用。 –

+0

@a_user:是的,如果你只運行'make',它將默認運行makefile的第一條規則。如果你需要構建所有目標,請在頂部添加一個目標,如'all:q_a q_g s_a s_g fork' –