为什么我的包含 header 的 makefile 不起作用?
Why doesn't my makefile with include header work?
我有以下生成文件(针对 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
有人可以告诉我我在 makefile 中做错了什么吗?
谢谢
从 .cpp
来源构建 .o
目标的隐式 make
规则不使用 INCLUDE
变量。 INCLUDE
不是标准变量,默认使用 make
规则。您的 Makefile
依赖于默认的 make 规则,以便从 .cpp
来源构建 .o
目标。
指定预处理器选项的正确 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 \
此外,您从 foo.o
中 linking foo
的显式 make
规则指定了所有这些 -I
选项。不幸的是,这绝对没有任何成就。 -I
仅在编译 .cpp
源代码时使用。 -I
选项在 linking 时根本不使用,在 linking 时被有效地忽略。您应该简单地从 link 命令中删除 $(INCLUDE)
,甚至不要将其替换为 $(CPPFLAGS)
。它只会引起混乱。
我有以下生成文件(针对 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
有人可以告诉我我在 makefile 中做错了什么吗?
谢谢
从 .cpp
来源构建 .o
目标的隐式 make
规则不使用 INCLUDE
变量。 INCLUDE
不是标准变量,默认使用 make
规则。您的 Makefile
依赖于默认的 make 规则,以便从 .cpp
来源构建 .o
目标。
指定预处理器选项的正确 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 \
此外,您从 foo.o
中 linking foo
的显式 make
规则指定了所有这些 -I
选项。不幸的是,这绝对没有任何成就。 -I
仅在编译 .cpp
源代码时使用。 -I
选项在 linking 时根本不使用,在 linking 时被有效地忽略。您应该简单地从 link 命令中删除 $(INCLUDE)
,甚至不要将其替换为 $(CPPFLAGS)
。它只会引起混乱。