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

标签 c search makefile directory header-files

一段时间以来,我一直在尝试解决这个问题,但现在我已经没有任何猜测/想法了。

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

 +Code
    +Classes
         +Fall_11
              +Numerical_Programs
                  +Bisection
                      -.c and .h file(s) for bisection
                       +linux
                            -makefile
    +util
        +CompareFloats
            - CompareFloats.h

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

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

###############################################################################
#       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 中,我有

#include "CompareFloats.h"

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

#include "../../../../util/CompareFloats/CompareFloats.h"

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

有什么建议吗?我真的很想用#include "CompareFloats.h"而不是相对路径。

如果我没有提供足够的信息,请告诉我。

谢谢。

最佳答案

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

1) 为 Bisection.o 制定规则:

Bisection.o :       ../Bisection.h
        gcc -c -o ../Bisection.o -I$(UTIL) ../Bisection.c 

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

关于c - 告诉 makefile 在不同的目录中搜索 C 头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7291173/

相关文章:

c - 如何使用第二个参数设置 0xFACE 的 ioctl 来调用特定函数?

c - 从没有 fileno() 的文件指针获取文件描述符

python - python中搜索文本正文中多个项目的最快方法

mysql - 在 mysql 字段中搜索

c++ - 如何在 make 下用多个文件编译 dlib?

c - c 中的队列 我的代码或算法有问题吗?

c - 在 C 中免费动态创建 3d 数组

在 plone 中搜索自定义类型

makefile - 检查 Makefile 中的程序是否存在,否则运行命令

c - 如何在 makefile 中组织大量 header 包含路径?