繁体   English   中英

C ++ Makefile头文件和cpp

[英]C++ Makefile headers and cpp

我正在尝试创建一个Makefile,但我真的很挣扎。 我有3个文件; main.cpp,garage.cpp和garage.hpp。 以下命令有效,但我无法弄清楚如何将其转换为makefile。 任何帮助将不胜感激。 -std = c ++ 0x很重要,因为如果我删除它并用其他东西替换它将无法编译。 再次感谢。

工作

g++ -std=c++0x -Wall -o main main.cpp garage.hpp garage.cpp

仅供参考,将头文件( garage.hpp )添加到编译/链接行是garage.hpp 只应将源文件( .cpp )放在编译行上。

@ gowrath的解决方案很容易理解,但它与命令行解决方案完全相同:它没有利用make的任何功能。 除了使用makefile之外,编写shell脚本或别名来执行此操作会更容易。

@ Rahul的解决方案解决了所有问题,但没有利用make的任何功能,这些功能允许您在编写makefile时减少输入或工作量。

Make实际上有大量的内置规则。 为了自定义它们,您只需设置标准变量的值,make将完成剩下的工作。 你可以写这个makefile:

CXX = g++
CXXFLAGS = -std=c++0x -Wall

OBJECTS = main.o garage.o

main: $(OBJECTS)
        $(CXX) $(CXXFLAGS) -o $@ $^

$(OBJECTS): garage.hpp

链接规则使用自动变量来避免必须重新键入目标( main )或先决条件( main.ogarage.o )。

最后一行确保如果garage.hpp文件发生更改,make知道它必须重新编译源文件。 您不必编写规则来告诉make 如何编译源文件:它已经知道如何执行它。

Makefile是编译代码的非常有效的方法。 Makefile使用时间戳来检测文件中的任何更改,并仅编译那些已更改的文件。 这节省了大量时间。

makefile下面将完美地完成你的工作。

 output: main.o garage.o
        g++ -std=c++0x -Wall main.o garage.o -o output

 main.o: main.cpp
        g++ -c main.cpp

 garage.o: garage.cpp garage.hpp
        g++ -c garage.cpp

 clean:
        rm *.o output

g++rm命令之前的空格是一个tab

将此文件命名为Makefile以编译make类型。 这将创建一个名为output的可执行文件

并使用./output运行可执行文件

最直接的方法是在Makefile中使用它(确保第二行之前的空格是单个选项卡):

all:
    g++ -std=c++0x -Wall -o main main.cpp garage.hpp garage.cpp

这当然不是最好的方法,但如果你只想编译它,这就是你的解决方案。 阅读有关make文件的教程以获得更详细的理解。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM