This question already exists:
Closed 5 years ago.
writing a Makefile that compiles an executable [closed]
提前道歉,我之前也问过类似的问题,但我没有得到一个明确的答案,我绝望了,因为我已经6个小时没有老师了,因为我的作业今晚就要交了,我实在受不了了。我有一个目录,里面只有一个文件:“proj1.cpp”,上面有很多代码。为了“编译一个名为proj1.x的可执行文件”,我需要在同一个目录中使用一个名为makefile的文件。(顺便说一句,我必须在Linux中通过SSH shell来实现这一点)。
如果有人能指导我完成我的步骤说明,我会非常感激,如何/为什么要针对我的情况这样做,而不仅仅是将我重定向到另一个页面?我这样问是因为我知道对于一个有经验的程序员来说,这个解决方案是容易的。

最佳答案

你可以很简单地完成这项工作:

proj1.x: proj1.cpp
    ${CXX} ${CXXFLAGS} -o $@ proj1.cpp

这是两行makefile。第二行的开头必须有一个制表符。第一行表示proj1.x取决于proj1.cpp;如果proj1.cppproj1.x(或proj1.x不存在)更新,则在第二行上执行动作。第二行运行C++编译器产生proj1.x(这是$@;如果你想写的话,你可以写proj1.x,尽管$@从长远来看更好)。我假设您的make使用C++编译器的${CXX},编译器选项使用${CXXFLAGS}。如果需要额外的库,可以添加这些库。等。
那完全是赤裸裸的。它可能会让你走。(顺便说一下,188行代码并不多。)
添加库:
LDFLAGS = -L …
LDLIBS  = -lxyz -lpqr

proj1.x: proj1.cpp
    ${CXX} ${CXXFLAGS} -o $@ proj1.cpp ${LDFLAGS} ${LDLIBS}

注意,许多人(可能是大多数人)在选择makefile符号时,会优先使用$(VAR)符号。我更喜欢大括号符号,所以这就是我使用的符号,除非有相反的编码标准-但是你已经知道了另一种选择。
请注意,源文件和对象文件列在库之前,除非您有很好的理由这样做。

关于c++ - makefile在linux shell脚本中编译可执行文件,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21506468/

10-10 07:12