我有文件夹ClientServer
。
在此文件夹中,我还有另外两个文件夹Database
和Server
。
在Server
文件夹中,我有使用“database.h”和“newsgroup.h”的类。
这些文件位于Database
文件夹中。我用这个make文件创建了一个lib。我将libfile移动到ClientServer
文件夹。然后我尝试在Server
文件夹中调用Make;我收到错误。
Makefile:47: ans.d: No such file or directory
Makefile:47: com.d: No such file or directory
Makefile:47: myserver.d: No such file or directory
In file included from myserver.cc:11:0:
ans.h:4:23: fatal error: newsGroup.h: No such file or directory
#include "newsGroup.h"
^
compilation terminated.
#
# Makefile to make the file libclientserver.a, containing
# connection.o and server.o
#
# Define the compiler. g++ can be
# changed to clang++.
CXX = g++
CC = g++
# Define preprocessor, compiler, and linker flags. Uncomment the # lines
# if you use clang++ and wish to use libc++ instead of libstdc++.
CXXFLAGS = -g -O2 -Wall -W -pedantic-errors
CXXFLAGS += -Wmissing-braces -Wparentheses -Wold-style-cast
CXXFLAGS += -std=c++11
#CPPFLAGS = -stdlib=libc++
#CXXFLAGS += -stdlib=libc++
#LDFLAGS += -stdlib=libc++
all: libdatabase.a
# Create the library; ranlib is for Darwin and maybe other systems.
# Doesn't seem to do any damage on other systems.
libdatabase.a: Database.o newsGroup.o
ar rv libdatabase.a Database.o newsGroup.o
ranlib libdatabase.a
# Phony targets
.PHONY: all clean
# Standard clean
clean:
rm -f *.o libclientserver.a
# Generate dependencies in *.d files
%.d: %.cc
@set -e; rm -f $@; \
$(CPP) -MM $(CPPFLAGS) $< > $@.$$$$; \
sed 's,\($*\)\.o[ :]*,\1.o $@ : ,g' < $@.$$$$ > $@; \
rm -f $@.$$$$
# Include the *.d files
SRC = $(wildcard *.cc)
include $(SRC:.cc=.d)
答案 0 :(得分:0)
实际上,图书馆只是拥有&#34;功能的主体&#34;。
您仍然必须声明函数的原型(包括.h
文件),并使其可供编译器访问。
因此,在您的情况下,让编译器可以访问newsgroup.h
(在这种情况下,将其放在与ans.h
文件相同的文件夹中),它应该可以解决问题。
答案 1 :(得分:0)
newsGroup.h
放在目录结构中的哪个位置? .cpp
文件是否在同一目录中看到它?否则使用-I
选项,告诉编译器可以找到该文件的目录。
添加例如-I <path_to>/Database
CXXFLAGS
<path_to>
,其中CXXFLAGS += -I<path_to>/Database
可能是用于运行编译器的工作目录的完整路径或相对路径:
#include
另一种选择是在ans.h
语句中指定相对路径,例如在#include "Database/newsGroup.h"
写
-I
并<path_to>/
选项只指向.d
由于.h
文件在生成时将接收这些路径并指定此时的依赖关系,因此还应该看到相对于make
工作目录的{{1}}依赖项。