我知道我可以使用自動變量[email protected]
從目標中的生成文件檢索當前目標的名稱。現在我不知道是否有可能有一個Makefile文件,看起來像這樣:...使用動態目標名稱
[email protected]:
g++ [email protected] && ./a.out
的想法是,輸入make test.cpp
應該運行g++ test.cpp && ./a.out
其中作爲make main.cpp
應該運行g++ main.cpp && ./a.out
。
我看到通配符可能與我的問題強烈相關。然而,像這樣的生成文件:
*.cpp:
g++ [email protected] && ./a.out
確實創造了適當的目標,但這樣一個makefile產量make: >>test.cpp<< is already up-to-date
運行make test.cpp
- 無需編譯發生。
要完整地完成這個答案,應該指出make有一組內置的_implicit rules_,它可以讓它理解如何從'.c'文件構建'.o',以及其他各種類型的源文件。此外,您可以定義自己的隱式規則或覆蓋內置規則,如果他們不做你所需要的。標準make支持_suffix rules_這是一種隱式規則的有限形式,GNU make支持_pattern rules_這是一種更強大的形式。您可以通過Google查看這些條款以瞭解它們以及如何指定它們。 – MadScientist
@MadScientist - 我同意自動規則在一定程度上是有用的,但是當構建比測試應用程序更簡單的任何東西時,您最好擁有完全控制權 – bobah
使用隱式規則決不會放棄任何控制權。而且,在比測試應用程序更簡單的任何構建系統中,它們絕對是非常重要的,以避免大量浪費的冗餘。有些人更喜歡靜態模式規則,但我個人認爲沒有什麼大的優勢。 – MadScientist