2011-05-30 59 views
2

因此,即使是一個簡單的Makefile也無法正常工作。繼承人我有什麼:讓一個簡單的Makefile起作用

proj : driver.o 
    icc -g -O3 -openmp driver.o -o proj 
driver.o : driver.c driver.h 
    icc -g -O3 -openmp driver.c 

我覺得它很簡單。 Proj只依賴於driver.o,而driver.o又依賴於driver.c和driver.h。在運行時,編譯器會在driver.c文件中的include下無法打開源文件「driver.h」。我錯過了什麼?

+0

重複? http://stackoverflow.com/questions/6024679/can-someone-show-me-how-to-create-this-very-simple-makefile/6024703#6024703在你的情況下,你將不得不在頂部添加CC = icc並更改名稱。此外,您將永遠不必將頭文件添加到編譯器。 – DipSwitch 2011-05-30 13:39:22

+2

行'icc -g -O3 -openmp driver.c'不會告訴編譯器生成一個目標文件。它可能會嘗試創建一個可執行文件,很可能使用默認名稱(例如a.out)。您可能需要添加'-c'來避免這種情況。 – 2011-05-30 13:40:13

回答

2

假設你從那裏所有的源文件和頭文件所在的目錄中運行make,請確保您使用在你的報價包括指令:

#include "driver.h" 

...而不是:

#include <driver.h> 

後者將燒焦如果系統包含路徑(並且您將不得不按照larsmans的建議將當前目錄添加到該路徑)。

+0

謝謝,看起來像這是問題。 – user776335 2011-05-30 15:18:18

3

您應該給icc一個-I.選項以使其在當前目錄中查找包含文件。

icc -I. -c -g -O3 -openmp driver.c 

(我注意到也加入-c標誌,以防止聯的自由。)

+0

不知道icc,但是不應該將當前工作目錄放在查找路徑中嗎? – Mario 2011-05-30 13:41:01

+0

@Mario:只有當OP將文件包含爲'「driver.h」';如果他使用''則不是。 – 2011-05-30 13:51:33

+0

那麼,我寧願替換括號(我認爲不正確的使用)。 – Mario 2011-05-30 13:55:46

1

它是在正確的文件夾?另外你編譯的方式可能需要在命令行中加-c來編譯driver.o而不是試圖創建一個完整的exectuable(只用於gcc,所以這可能不需要)。

除此之外(以及可能的另外-I標誌larsmans提到我看不到任何其他問題。