C++ C++;生成文件未链接

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

这是我得到的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 
    $(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