makefile在linux shell脚本中编译可执行文件

时间:2014-02-02 02:54:55

标签: c++ linux shell makefile

提前道歉,我早些时候问了一个类似的问题,但我没有得到一个明确的答案,我很绝望,因为我一直试图在没有老师的情况下弄清楚6个小时,因为我的作业将于今晚到期只是不能再忍受了。我的目录中只有一个文件:“proj1.cpp”,上面有很多代码。我需要在同一目录(它的名为makefile)中使用文件'makefile',以便“编译一个名为:proj1.x的可执行文件”。 (我已经在Linux中通过SSH shell执行此操作)。

我真的很感激,如果有人可以帮助我完成我的步骤说明如何/为什么要为我的情况执行此操作而不只是将我重定向到另一个页面?我只是问,因为我知道解决方案对于有经验的程序员来说很容易。

1 个答案:

答案 0 :(得分:2)

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

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

这是两行makefile。在第二行的开头必须有 Tab 。第一行说proj1.x取决于proj1.cpp;如果proj1.cppproj1.x更新(或proj1.x不存在),则在第二行执行操作。第二行运行C ++编译器以生成proj1.x(即$@;如果您愿意,可以在那里写proj1.x,但从长远来看,$@更好一些) 。我假设你的make使用${CXX}用于C ++编译器,${CXXFLAGS}用于编译器选项。如果您需要额外的库,可以添加它们。等

这完全是个笨蛋makefile。它可能会让你去。 (顺便说一句,188行代码不是很多。)


添加库:

LDFLAGS = -L …
LDLIBS  = -lxyz -lpqr

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

请注意,许多(可能是大多数)人使用替代$(VAR)表示法而不是${VAR}。我更喜欢大括号,所以这就是我使用的,除非有相反的编码标准 - 但是你已经被告知了替代方案。

请注意,源文件和目标文件在库之前列出,除非您有充分的理由不这样做。