【发布时间】:2014-03-04 14:12:50
【问题描述】:
我正在尝试编译一个由一个主 C 文件和两个辅助 C++ 文件组成的程序。 Main.c 依赖于 Wrapper.cpp,而后者又依赖于 Utility.cpp。具体来说,Main.c 调用 Wrapper.cpp 中定义的函数 func()。
有趣的问题是我可以从命令行编译程序,但不能从 makefile 编译。我收到一个链接错误“main.o:对 func() 的引用未定义”。这可能主要是因为我了解 makefile 的概念,但它们可能变得太复杂了!
这是我从命令行编译的方式:
g++ -c Wrapper.cpp Utility.cpp
gcc -c Main.c Wrapper.cpp
g++ -o myProg Main.o Wrapper.o Utility.o
这是我的生成文件:
# Rules to produce the targets
all: Main
Main: Utility.o Main.o Wrapper.o
g++ -o myProg Utility.o Main.o Wrapper.o -lstdc++
# Rules to produce the object files
Utility.o: Utility.cpp
g++ -c Utility.cpp
Wrapper.o: Wrapper.cpp Utility.cpp
g++ -c Wrapper.cpp Utility.cpp
Main.o: Main.c Wrapper.cpp
gcc -c Main.c Wrapper.cpp
我知道我可能会编译 Utility.cpp 和 Wrapper.cpp 两次,但我真的不知道如何编写编译规则。有人可以给我一些有用的见解。另外请不要给我复杂的makefile,因为我对它们很陌生。
【问题讨论】:
标签: compilation linker makefile