Почему не работает мой make-файл с заголовком include?

У меня есть следующий make-файл (для C ++)

LDLIBS=$(shell root-config --libs)
INCLUDE= -I/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/include            \
-I/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/include/darwin     \foo: foo.o
$(CXX) -shared -fPIC $(LDLIBS) $(INCLUDE) -o foo.o foo.cpp

foo.cpp имеет следующие включает

#include <jvmti.h>

Если я бегу "g++ -shared -fPIC -I..." Команда вручную, он будет производить foo.o как и ожидалось.

Но когда я бегу makeЯ получу эту ошибку

$ make
c++    -c -o foo.o foo.cpp
lib_track_npe.cpp:1:10: fatal error: 'jvmti.h' file not found
#include <jvmti.h>
^
1 error generated.
make: *** [foo.o] Error 1

Может кто-нибудь сказать мне, что я сделал не так в make-файле?

Спасибо

1

Решение

Неявный make правило для строительства .o цели из .cpp источники не используют INCLUDE переменная. INCLUDE не является стандартной переменной, используемой по умолчанию make правила. Ваш Makefile зависит от правил make по умолчанию для построения .o цели из .cpp источники.

Правильный make переменная для указания параметров препроцессора CPPFLAGS:

CPPFLAGS= -I/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/include            \
-I/Library/Java/JavaVirtualMachines/jdk1.8.0_51.jdk/Contents/Home/include/darwin     \

Кроме того, ваш явный make правило для ссылки foo от foo.o определяет все эти -I ДОПОЛНИТЕЛЬНО. К сожалению, это абсолютно ничего не дает. -I используется только при компиляции .cpp источники. -I опция вообще не используется при связывании и фактически игнорируется при связывании. Вы должны просто удалить $(INCLUDE) из вашей команды ссылки, даже не заменяя его $(CPPFLAGS), Это только вызывает путаницу.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]