C++ GCC链接静态库
我在网上看到过这样的问题,但每个人都有不同的答案和目录结构,这对我来说并不适用 我的生成文件:C++ GCC链接静态库,c++,linux,gcc,makefile,C++,Linux,Gcc,Makefile,我在网上看到过这样的问题,但每个人都有不同的答案和目录结构,这对我来说并不适用 我的生成文件: CC = g++ DEBUG = -g -std=c++11 TARGET = main OBJECT_FILES = BingResultSet.o main.o INC_PATH = -I HTTPClientLib/include LIB_PATH = -L HTTPClientLib/lib/ start: clean BingResultSet.o main.o $(CC) $(D
CC = g++
DEBUG = -g -std=c++11
TARGET = main
OBJECT_FILES = BingResultSet.o main.o
INC_PATH = -I HTTPClientLib/include
LIB_PATH = -L HTTPClientLib/lib/
start: clean BingResultSet.o main.o
$(CC) $(DEBUG) $(INC_PATH) $(LIB_PATH) $(OBJECT_FILES) -o $(TARGET)
rm -f *.o
BingResultSet.o: BingResultSet.cpp BingResultSet.h
$(CC) $(DEBUG) $(INC_PATH) $(LIB_PATH) -c BingResultSet.cpp
main.o: main.cpp
$(CC) $(DEBUG) $(INC_PATH) $(LIB_PATH) -c main.cpp
clean:
rm -f $(OBJECT_FILES) $(TARGET)
我的文件结构:
/Desktop/DataMiner/.cpp, .h, and makefile
/Desktop/DataMiner/HTTPClientLib/include/HTTPClient.h
/Desktop/DataMiner/HTTPClientLib/lib/HTTPClient.a
在makefile中链接静态库的正确方法是什么?这是我的$0.02:
$(TARGET): $(OBJECT_FILES)
$(CXX) $(DEBUG) $(INC_PATH) $^ -o $@ $(LIB_PATH)
%.o: %.cpp
$(CXX) $(DEBUG) $(INC_PATH) -c $< -o $@
.PRECIOUS
目标进行注释。GNU Make会自动删除中间目标CXX = g++
TARGET = main
OBJECT_FILES = BingResultSet.o main.o
INC_PATH = -I HTTPClientLib/include
LIB_PATH = -L HTTPClientLib/lib/
CPPFLAGS = -g -std=c++11
CPPFLAGS+= $(INC_PATH)
# standard derived flags:
CXXFLAGS+=$(CPPFLAGS)
LDFLAGS+=$(LIB_PATH)
start: .depends $(TARGET)
$(TARGET): $(OBJECT_FILES)
$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f .depends $(OBJECT_FILES) $(TARGET)
# to keep the .o files:
.PRECIOUS: $(OBJECT_FILES)
.depends:
$(CXX) -MM $(CXXFLAGS) -c *.cpp > $@
-include .depends
⑨(或类似内容,请参见手册页)在重新构建生成文件以获得合理结果之前,不应要求运行
clean
。如果您需要确认您的makefile没有正确写入。每个目标都应该创建一个目标名称(而不是其他名称)的文件,以便make能够正确执行其工作。您是否在询问如何将HTTPClient.a
链接到您的输出main
二进制文件中?您知道与静态库的链接是如何正常工作的吗?(这就是在没有makefile的情况下手动执行此操作的方式?)不确定“在没有makefile的情况下手动”是什么意思。我知道如何在VS上链接静态libs,但是现在我正在尝试在Linux上构建这个项目,所以gcc上的链接有点不同,这给了我一些问题。我的意思是你知道你会怎么做吗?您需要使用什么命令来执行此操作,等等。?(听起来好像没有,但我不清楚问题是如何做到这一点,还是如何让makefile正确地做到这一点。)@shawna你可以看到流视频(请原谅任何咒骂)()
CXX = g++
TARGET = main
OBJECT_FILES = BingResultSet.o main.o
INC_PATH = -I HTTPClientLib/include
LIB_PATH = -L HTTPClientLib/lib/
CPPFLAGS = -g -std=c++11
CPPFLAGS+= $(INC_PATH)
# standard derived flags:
CXXFLAGS+=$(CPPFLAGS)
LDFLAGS+=$(LIB_PATH)
start: .depends $(TARGET)
$(TARGET): $(OBJECT_FILES)
$(CXX) $(CXXFLAGS) $^ -o $@ $(LDFLAGS)
%.o: %.cpp
$(CXX) $(CXXFLAGS) -c $< -o $@
clean:
rm -f .depends $(OBJECT_FILES) $(TARGET)
# to keep the .o files:
.PRECIOUS: $(OBJECT_FILES)
.depends:
$(CXX) -MM $(CXXFLAGS) -c *.cpp > $@
-include .depends
$ make clean
rm -f .depends BingResultSet.o main.o main
$ make
g++ -MM -g -std=c++11 -I HTTPClientLib/include -c *.cpp > .depends
g++ -I HTTPClientLib/include -c BingResultSet.cpp -o BingResultSet.o
g++ -I HTTPClientLib/include -c main.cpp -o main.o
g++ -I HTTPClientLib/include BingResultSet.o main.o -o main -L HTTPClientLib/lib/
$ cat .depends
BingResultSet.o: BingResultSet.cpp BingResultSet.h
main.o: main.cpp BingResultSet.h
test.o: test.cpp