C++ Makefile头文件和cpp

Car*_*arl 2 c++ makefile

我正在尝试创建一个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
Run Code Online (Sandbox Code Playgroud)

Mad*_*ist 8

仅供参考,将头文件(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
Run Code Online (Sandbox Code Playgroud)

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

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

  • 请参阅我的最后一段:_您不必编写规则来告诉使如何编译源文件:它已经知道如何执行。 (2认同)

gow*_*ath 1

最直接的方法是在 Makefile 中包含此内容(确保第二行之前的空格是一个制表符):

all:
    g++ -std=c++0x -Wall -o main main.cpp garage.hpp garage.cpp
Run Code Online (Sandbox Code Playgroud)

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