問題
我當前的作業目錄中有三個檔案:
hello.cppgoodbye.cppprog.cpp
我只想預處理hello.cpp并將goodbye.cpp輸出轉儲到檔案hello.i和goodbye.i. g 有沒有辦法在 Ubuntu Linux 命令列中使用一個命令來實作這一點?我只想呼叫g 一次的原因是因為我最終想將此命令包含在我自己的 Makefile 中。
我試過的
我基本上做了以下事情:
g -E -o goodbye.i hello.i goodbye.cpp hello.cpp
不出所料,失敗并出現以下錯誤:
g :致命錯誤:不能用“-c”、“-S”或“-E”指定“-o”,多個檔案編譯終止
我也試過g -E goodbye.cpp hello.cpp了,這只是提醒我前處理器默認轉儲到標準輸出。出于本練習的目的,我確實需要g 將結果轉儲到實際*.i檔案中......
我試圖避免的
從評論中,在我看來,我可以提供進一步的澄清。我試圖避免在我的 Makefile 中有多個命令,因為每個單獨.cpp的檔案都會生成一個單獨的命令:
all: preprocess_hello preprocess_goodbye
preprocess_hello:
g -E -o hello.i hello.cpp
preprocess_hello:
g -E -o goodbye.i goodbye.cpp
顯然,這并不理想,因為我添加的每個新檔案都需要添加新命令并更新all目標。
uj5u.com熱心網友回復:
您可以使用模式規則,以便 Make 知道如何從 .c 檔案生成 .i 檔案:
%.i: %.cpp
g -E -o $@ $<
然后如果你的 makefile 需要hello.i,Make 會知道它可以使用命令g -E -o hello.i hello.cpp
例如,如果您擁有all: hello.i goodbye.i并運行make all它,它將知道它需要 hello.i 和 goodbye.i,它會生成它們。
如果您有 .cpp 檔案串列并且需要將其轉換為 .i 檔案串列(例如,如果您想這樣做all: $(CPPFILES)但它不起作用,因為這些是 .cpp 檔案而不是 .i 檔案),您可以使用patsubst:
all: $(patsubst %.cpp,%.i,$(CPPFILES))
您甚至可以使用通配符來獲取 cpp 檔案的串列。要all依賴于當前目錄中所有 .cpp 檔案的所有 .i 檔案,您可以使用
all: $(patsubst %.cpp,%.i,$(wildcard *.cpp))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/484463.html
上一篇:在Java中獲取產品ID(整數)
