Указание make-файлу искать в другом каталоге файлы заголовков C - PullRequest
1 голос
/ 03 сентября 2011

Я уже некоторое время пытаюсь понять это, и я нахожусь в точке, где у меня нет догадок / идей.

Я делаю некоторые программы на 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» вместо относительного пути.

Если я не предоставляю достаточно информации, пожалуйста, дайте мне знать.

Спасибо.

Ответы [ 2 ]

1 голос
/ 03 сентября 2011

Итак, ваша проблема в автоматическом правиле, созданном для Bisection.o.Вы можете сделать одно из двух:

1) создать правило для Bisection.o:

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

2) добавить флаг включения -I$(UTIL) к переменной CFLAGS (эти флаги передаются компилятору C)

0 голосов
/ 03 сентября 2011

Начните с:

CFLAGS=$(CFLAGS) -I$(UTIL)
CXXFLAGS=$(CXXFLAGS) -I$(UTIL)

Большинство людей также нуждаются в

LDFLAGS=$(LDFLAGS) -I$(UTIL)

, но вы этого еще не сделали.

...