Makefile添加最后一个标志



我正在尝试使用makefile编译我的项目。

最适合我的命令行是:

g++ -I stuff/ -L stuff2/ src/Core.cpp -o file_name -ljvm

如果最后我错过了-ljvm,我在编译时会出现错误,那么这个标志必须在file_name之后。问题是我无法使用makefile成功添加-ljvm

我的生成文件如下:

NAME = 'AI'
SRC = src
TGT = obj
PRG = application
INCLUDES = -Iinclude -I /usr/lib/jvm/java-7-openjdk-amd64/include/
LIBRARIES = -L /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/
CXXFLAGS = -Wall -O3 -std=c++0x $(INCLUDES) $(LIBRARIES)
SOURCES = $(wildcard $(SRC)/*.cpp)
OBJS = $(addprefix $(TGT)/, $(notdir $(SOURCES:.cpp=.o)))
$(TGT)/%.o: $(SRC)/%.cpp
    $(CXX) $(CXXFLAGS) -c $< -o $@
$(PRG)/$(NAME): $(OBJS)
    $(CXX) $(LDFLAGS) $(OBJS) -o $@

这给了我一个错误,因为我没有添加-ljvm

若我把它添加到:$(CXX) $(CXXFLAGS) -c $< -o $@ -ljvm,并没有任何变化,我仍然得到相同的错误。

如果我把它添加到最后一行$(CXX) $(LDFLAGS) $(OBJS) -o $@ -ljvm,我会得到一个不同的错误:

g++  obj/Core.o -o application/'AI' -ljvm
/usr/bin/ld: cannot find -ljvm
collect2: error: ld returned 1 exit status
make: *** [application/'AI'] Error 1

我有一种感觉,我错过了一些简单的东西。任何建议都将不胜感激。

您的最后一行使用了实际上从未定义过的$(LDFLAGS)
ld抱怨找不到-ljvm,那是因为你必须通过

-L /usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/server/ 

到链接器(即,将其添加到您的最后一个命令中(
尝试定义至少包含$(LIBRARIES)LDFLAGS

最新更新