首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >告诉makefile在不同的目录中搜索C头文件

告诉makefile在不同的目录中搜索C头文件
EN

Stack Overflow用户
提问于 2011-09-03 12:29:11
回答 2查看 7.7K关注 0票数 1

我已经尝试了一段时间来弄清楚这个问题,现在我已经到了无法猜测/想出来的地步了。

我正在为学校的一个数值分析课编写一些C程序,其中许多程序都使用了我预先编写的实用函数。我希望将实用程序"library“放在与类程序不同的目录中,但在需要时可以包含实用程序头文件。下面是我的“设置”的结构(+ =目录/文件夹,-=文件)

代码语言:javascript
复制
 +Code
    +Classes
         +Fall_11
              +Numerical_Programs
                  +Bisection
                      -.c and .h file(s) for bisection
                       +linux
                            -makefile
    +util
        +CompareFloats
            - CompareFloats.h

所以基本上,我在二分表的目录中有二分表.c和二分表.h。Bisection.c使用浮点比较函数,这些函数位于util/CompareFloats目录的CompareFloats.h中。

下面是我一直在尝试使用的makefile:

代码语言:javascript
复制
###############################################################################
#       makefile for Bisection test                           #
###############################################################################


#--------------------------------Macros----------------------------------------#
COMPILER = gcc
UTIL = ../../../../../util/CompareFloats
FLAGS = -ggdb -Wall -lm -I$(UTIL)
OBJECTS =  ../Bisection.o ../BisectTest.o $(UTIL)/CompareFloats.o
OBJECT_DIR = ../OBJECTS
EXEC = BisectTest

all :   $(EXEC)
    test -d $(OBJECT_DIR) || mkdir $(OBJECT_DIR)
    mv $(OBJECTS) $(OBJECT_DIR)

$(EXEC) : $(OBJECTS)
      $(COMPILER) $(FLAGS) $(OBJECTS) -o $(EXEC)

#-----------------------------Dependencies--------------------------------------#
Bisection.o :       ../Bisection.h
BisectTest.o:       ../Bisection.h 
CompareFloats.o:    $(UTIL)/CompareFloats.h

clean:
    rm -f $(EXEC) *.o $(OBJECT_DIR)/*.o
    rmdir $(OBJECT_DIR)

我知道-I标志将允许在其他目录中搜索头文件。我认为我使用它是正确的,但我不能让它工作。我只是得到了一个错误,即CompareFloats.h不存在(我仔细检查了路径,它是正确的)。在Bisection.c中,我有

代码语言:javascript
复制
#include "CompareFloats.h"

像往常一样。我能让它工作的唯一方法是让#include语句包含相对路径,比如

代码语言:javascript
复制
#include "../../../../util/CompareFloats/CompareFloats.h"

(它比makefile少了一个../,因为Bisection.c比makefile高一个级别)。

有什么建议吗?我真的希望只有#include "CompareFloats.h“,而不是相对路径。

如果我没有提供足够的信息,请让我知道。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-03 12:36:17

所以您的问题出在为Bisection.o生成的自动规则中。您可以执行以下两项操作之一:

1)为Bisection.o制定规则

代码语言:javascript
复制
Bisection.o :       ../Bisection.h
        gcc -c -o ../Bisection.o -I$(UTIL) ../Bisection.c 

2)将包含标志-I$(UTIL)附加到变量CFLAGS (这些是传递给C编译器的标志)

票数 1
EN

Stack Overflow用户

发布于 2011-09-03 12:45:13

从以下内容开始:

代码语言:javascript
复制
CFLAGS=$(CFLAGS) -I$(UTIL)
CXXFLAGS=$(CXXFLAGS) -I$(UTIL)

大多数人最终也需要

代码语言:javascript
复制
LDFLAGS=$(LDFLAGS) -I$(UTIL)

但你现在还不知道。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7291173

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档