2016-11-09 49 views
0

如果以前已經詢問過此問題,我對此進行了研究並找不到合適的答案,我表示歉意。使用一個規則生成多個文件 - Makefile

我有一個C++項目,我必須使用make進行編譯。

我想要的輸出是使用一個make文件的三個不同的可執行文件,但我必須使用一個模式規則進行編譯。

該項目由每個可執行文件的三個源文件組成,所有這些文件都使用頭文件中的函數,並將其編譯爲目標文件。

我已成功地編譯它們,而是使用一個單獨的規則爲每個文件

一個規則的例子:

file1: file1.cpp header.o header.h 
     g++ $(FLAGS) file1.cpp header.o -o file1 

感謝。

編輯:

file1: file1.cpp header.o header.h 
    g++ $(FLAGS) file1.cpp header.o -o file1 

file2: file2.cpp header.o header.h 
    g++ $(FLAGS) file2.cpp header.o -o file2 

file3: file3.cpp header.o header.h 
    g++ $(FLAGS) file3.cpp header.o -o file3 

這些是可執行

header.o: header.cpp header.h 
     g++ $(FLAGS) -c header.cpp -o header.o 

而這是與功能

FLAGS變量包括,其中頭文件被存儲在目錄中的對象文件。

+0

爲什麼'file1'取決於兩個'header.o '和'header.h'?爲什麼你首先要分開編譯頭文件?無論如何,如果'file1:file1.cpp'模式適用於每個可執行文件,那麼您甚至不需要單個配方,發佈[mcve]。 – user657267

+0

您好,我編輯了主帖,幷包含了我擁有的所有代碼。我正在將頭文件編譯爲目標代碼,然後將其鏈接到每個可執行文件。 – Joe

+0

這仍然不是一個mcve,'FLAGS'設置爲什麼?我提到'header.o'的原因是你從不**單獨編譯頭文件(除非使用像預編譯頭文件這樣的東西,你不在這裏),它們被包含在其他的翻譯單元中。 – user657267

回答

1

製作具有built-in rules用於編譯和鏈接,所有你需要做的是使用你的變量和規則,正確的格式,下面應該工作

targets := file1 file2 file3 
CPPFLAGS := -Isome_include_dir 

.PHONY: all 
all: $(targets) 
$(targets): CC := $(CXX) 
$(targets): %: %.o header.o 
%.o: header.h 
+0

是的!這已經解決了我的問題。我正在考慮使用這個,但不知道如何,我現在開始工作。謝謝。我會看看我是否可以給你一個+1,因爲我是一個新用戶。如果不是那麼我很抱歉。再次感謝! – Joe