Я уже некоторое время пытаюсь понять это, и я нахожусь в точке, где у меня нет догадок / идей.
Я делаю некоторые программы на C для класса численного анализа вШкола и многие из программ используют служебные функции, которые я написал заранее.Я бы хотел, чтобы утилита «библиотека» находилась в отдельном каталоге от программ классов, но при необходимости могла бы включать файлы заголовков утилиты.Ниже приведена структура моей «установки» (+ = каталог / папка, - = файлы)
+Code
+Classes
+Fall_11
+Numerical_Programs
+Bisection
-.c and .h file(s) for bisection
+linux
-makefile
+util
+CompareFloats
- CompareFloats.h
Итак, в основном у меня есть Bisection.c и Bisection.h в каталоге Bisection.Bisection.c использует функции сравнения с плавающей точкой, которые находятся в CompareFloats.h в каталоге util / CompareFloats.
Ниже приведен make-файл, который я пытался использовать:
###############################################################################
# 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 на один уровень выше от make-файла).
Есть предложения?Я действительно хотел бы просто #include «CompareFloats.h» вместо относительного пути.
Если я не предоставляю достаточно информации, пожалуйста, дайте мне знать.
Спасибо.