创建用于编译c ++的通用简单Makefile

问题描述 投票:1回答:1

我想要通用的Makefile。

ifeq ($(OS),Windows_NT)
        test.exe: test.cpp dog.o
                g++ test.cpp dog -lws2_32 -o test.exe
else
        test: test.cpp dog.o
                g++ test.cpp dog -o main

dog.o: dog.cpp dog.h
        g++ -c dog.cpp

这给了我:

Makefile:5: *** recipe commences before first target. Stop.

有人可以帮我创造那个吗?

c++ makefile
1个回答
0
投票

您在该Makefile中有2个错误:

Makefile:5: *** recipe commences before first target. Stop.

规则需要从第一列开始,因此请不要使test.ext / test行缩进。

留下的修复:

Makefile:10: *** missing 'endif'. Stop.

ifeq需要一个endif。参见下面的主要工作版本。

ifeq ($(OS),Windows_NT)
test.exe: test.cpp dog.o
        g++ test.cpp dog -lws2_32 -o test.exe
else
test: test.cpp dog.o
        g++ test.cpp dog -o main
endif

dog.o: dog.cpp dog.h
        g++ -c dog.cpp

0
投票

ifeq在make文件被“执行”之前由make处理。它有点像c中的预处理器。因此ifeqelse之间的所有内容(以及缺少的endif)都将被原样复制到“后处理”的Makefile中。

ifeq ($(OS),Windows_NT)
<no tab here>test.exe: test.cpp dog.o
<tab here>g++ test.cpp dog -lws2_32 -o test.exe
else
<no tab here>test: test.cpp dog.o
<tab here>g++ test.cpp dog -o main
endif

dog.o: dog.cpp dog.h
        g++ -c dog.cpp
© www.soinside.com 2019 - 2024. All rights reserved.