C++ C++;生成文件未链接
这是我得到的make文件,但是link中的所有函数不能在main中调用。我试过很多不同的方法都不管用。这很有效C++ C++;生成文件未链接,c++,makefile,C++,Makefile,这是我得到的make文件,但是link中的所有函数不能在main中调用。我试过很多不同的方法都不管用。这很有效 EXENAME = prog1 OBJS = link.o main.o CXX = clang++ CXXFLAGS = -Wall -Wextra LD = clang++ all : $(EXENAME) $(EXENAME) : $(OBJS) $(LD) $(OBJS) -o $(EXENAME) main.o : link.h main.cpp
EXENAME = prog1
OBJS = link.o main.o
CXX = clang++
CXXFLAGS = -Wall -Wextra
LD = clang++
all : $(EXENAME)
$(EXENAME) : $(OBJS)
$(LD) $(OBJS) -o $(EXENAME)
main.o : link.h main.cpp
$(CXX) $(CXXFLAGS) main.cpp
link.o : link.h link.cpp
$(CXX) $(CXXFLAGS) link.cpp
clean :
-rm -f *.o $(EXENAME)
但是我想这不是正确的方法吗?如果您至少提供一些您得到的错误(可能是前几个),这会有所帮助 构建对象文件的编译器调用错误。如果没有指定任何其他标志,编译器将尝试获取所有输入文件并从中创建可执行文件。因此,这条规则:
prog1: main.cpp link.h link.cpp
clang++ -Wall -Wextra -o prog1 main.cpp link.cpp
扩展到此编译行:
main.o : link.h main.cpp
$(CXX) $(CXXFLAGS) main.cpp
编译器将尝试编译main.cpp
文件并将其链接到名为a.out
(默认情况下)的可执行文件中(仅此而已)
如果要生成对象文件而不是链接程序,则需要在编译行中添加-c
选项:
clang++ -Wall -Wextra main.cpp
建筑link.o
同上
更好的方法是简单地使用make的内置规则来编译目标文件,而不是编写自己的规则;在这种情况下,整个makefile可能只是:
main.o : link.h main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp
如果您至少提供一些错误(可能是前几个),这会有所帮助 构建对象文件的编译器调用错误。如果没有指定任何其他标志,编译器将尝试获取所有输入文件并从中创建可执行文件。因此,这条规则:
prog1: main.cpp link.h link.cpp
clang++ -Wall -Wextra -o prog1 main.cpp link.cpp
扩展到此编译行:
main.o : link.h main.cpp
$(CXX) $(CXXFLAGS) main.cpp
编译器将尝试编译main.cpp
文件并将其链接到名为a.out
(默认情况下)的可执行文件中(仅此而已)
如果要生成对象文件而不是链接程序,则需要在编译行中添加-c
选项:
clang++ -Wall -Wextra main.cpp
建筑link.o
同上
更好的方法是简单地使用make的内置规则来编译目标文件,而不是编写自己的规则;在这种情况下,整个makefile可能只是:
main.o : link.h main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp