gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 04:04:55 25 4
gpt4 key购买 nike

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

我正在为学校的数值分析课编写一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com