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

C++ makefile在linux shell脚本中编译可执行文件,c++,linux,shell,makefile,C++,Linux,Shell,Makefile,提前道歉,我之前问了一个类似的问题,但我没有得到一个明确的答案,我绝望了,因为我已经在没有老师的情况下试着弄清楚了6个小时,而且由于我的作业今晚到期,我再也受不了了。我的目录中只有一个文件:“proj1.cpp”,上面有很多代码。我需要在同一目录中使用一个文件“makefile”(名为makefile),以便“编译一个名为:proj1.x的可执行文件”。(顺便说一句,我必须在Linux中通过SSH外壳完成这项工作) 如果有人能带我完成步骤说明,告诉我如何/为什么针对我的情况这样做,而不是将我重定

提前道歉,我之前问了一个类似的问题,但我没有得到一个明确的答案,我绝望了,因为我已经在没有老师的情况下试着弄清楚了6个小时,而且由于我的作业今晚到期,我再也受不了了。我的目录中只有一个文件:“proj1.cpp”,上面有很多代码。我需要在同一目录中使用一个文件“makefile”(名为makefile),以便“编译一个名为:proj1.x的可执行文件”。(顺便说一句,我必须在Linux中通过SSH外壳完成这项工作)


如果有人能带我完成步骤说明,告诉我如何/为什么针对我的情况这样做,而不是将我重定向到另一个页面,我将不胜感激?我之所以这么问,是因为我知道解决方案对于一个有经验的程序员来说很容易。

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

proj1.x: proj1.cpp
    ${CXX} ${CXXFLAGS} -o $@ proj1.cpp
这是两行
makefile
。第二行的开头必须有一个选项卡。第一行表示
proj1.x
依赖于
proj1.cpp
;如果
proj1.cpp
proj1.x
新(或
proj1.x
不存在),则在第二行执行操作。第二行运行C++编译器产生<代码> Prx1.x/Cux>(即<代码> $@ /CODE >;您可以编写代码> Prx1.x/Cord>。如果您想,尽管代码> $@ /代码>从长远来看更好。我假设你的<代码>使使用C++代码的<代码> ${CXX},编译器选项使用<代码> ${CXXFLAG}}//>。如果需要额外的库,可以添加这些库。等等

这是一个完全赤裸裸的
makefile
。这可能会让你走。(顺便说一句,188行代码并不多。)


添加库:

LDFLAGS = -L …
LDLIBS  = -lxyz -lpqr

proj1.x: proj1.cpp
    ${CXX} ${CXXFLAGS} -o $@ proj1.cpp ${LDFLAGS} ${LDLIBS}
请注意,许多(可能大多数)人使用替代的
$(VAR)
符号,而不是
${VAR}
。我更喜欢花括号表示法,所以除非有相反的编码标准,否则我会使用花括号表示法——但您已经被告知了替代方法


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

请保持语言整洁-这是一场家庭秀!究竟为什么您需要创建
proj1.x
?这不是类Unix系统上的常规扩展。(一定会有某种语言将其用于源代码,但默认情况下不会为可执行文件提供任何扩展。)如果您只需要创建
proj1
,那么您甚至不需要makefile。生成
proj1.x
的最简单方法可能是一行生成文件:
proj1.x:proj1;ln-s proj1 proj1.x
(不需要制表符)。很抱歉语言lol。但是谢谢你的回答,我想我终于可以让它工作了!!!只是有点小调整要做。我也不知道哈哈,我的教授要求我这样做。@TommyBoi你看过吗?这将大大简化您的任务。好的,我正在让它工作。如何在makelist文件中包含库?是不是和C++程序一样呢?