2011-05-30 41 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提到我看不到任何其他问题。