Makefile添加最后一个标志

时间:2015-07-03 10:25:52

标签: makefile

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

对我来说完美的命令行是:

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

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

我的makefile如下所示:

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

我觉得我在这里缺少一些简单的东西。任何建议都非常感谢。

1 个答案:

答案 0 :(得分:1)

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

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

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