【问题标题】:How to write paths in Makefile for Windows如何在 Makefile for Windows 中编写路径
【发布时间】:2020-03-14 00:30:39
【问题描述】:

我正在运行 Windows 10,并且正在尝试编写一个 Makefile 来编译一个使用 SFML 库以及 nuklear 库的 C++ 文件。我安装了 MinGW 并将其添加到我的 PATH 中,并且我还安装了 GNU Make 并将其添加到我的 PATH 中。所以我可以从命令提示符窗口同时调用makegcc

我正在编辑的 Makefile 是:

# Install
CC = gcc
BIN = demo

# Flags
CFLAGS += -s -O2

SRC = main.cpp
OBJ = $(SRC:.cpp=.o)

# Edit the line below to point to your SFML folder on Windows
SFML_DIR = C:/SFML-2.5.1/

BIN := $(BIN).exe
LIBS = -lmingw32 -DSFML_STATIC -lsfml-window-s -lsfml-system-s -lopengl32 -lwinmm -lgdi32

SFML_INC = -I $(SFML_DIR)/include
SFML_LIB = -L $(SFML_DIR)/lib

$(BIN):
    $(CC) $(SRC) $(CFLAGS) -o $(BIN) $(SFML_INC) $(SFML_LIB) $(LIBS)

但是根据nuklear documentation,我需要在Makefile 中包含nuklear.h对于我的项目,我有一个名为include 的目录,其中包含nuklear.h完整路径类似于:

C:/Users/Me/Github Repositories/folder-1/folder-2/include/

所以我在 Makefile 中添加了以下内容:

SFML_DIR = C:/SFML-2.5.1/
INCL_DIR = C:/Users/Me/Github Repositories/folder-1/folder-2/include/

$(BIN):
    # $(CC) $(SRC) $(CFLAGS) -o $(BIN) $(SFML_INC) $(SFML_LIB) $(LIBS)
    $(CC) $(SRC) $(CFLAGS) -o $(BIN) -I $(INCL_DIR) $(SFML_INC) $(SFML_LIB) $(LIBS)

我添加了nuklear.h 的路径,并要求通过指定-I 标志将其包含在编译中。但是当我运行Make 时出现以下错误:

makefile:23: *** missing separator.  Stop.

现在,路径中有一个空格(“Github 存储库”)。所以我相信我需要添加引号来包含完整路径。

但是当我将引号添加到完整路径时,我收到以下错误:

make: *** No rule to make target `/Users/Me/Github', needed by `demo.exe'.  Stop.

所以当谈到在 Windows 上的 Makefile 中指定路径时,我遗漏了一些东西。当路径包含空格时,如何在 Makefile 中添加完整路径?

【问题讨论】:

标签: c++ gnu-make


【解决方案1】:

我解决了这个问题。

首先,我将我的项目从Github Repositories 目录中移出并移到一个新目录中,其中没有 个空格,GitHub_Repositories。这解决了路径问题。

其次,我必须在

之前插入一个tab,而不是空格
$(CC) $(SRC) $(CFLAGS) -o $(BIN) $(SFML_INC) $(SFML_LIB) $(LIBS)

以前(如原始帖子中所见),那里有空格。

【讨论】:

  • 路径包含空格在配方中没有问题。 Make 不关心这一点:你只需要确保你正确地为你的 shell 转义了空格。 make 不喜欢的是目标中的空白或 makefile 中的先决条件。
  • 当然你必须使用硬制表符来缩进食谱。不能使用空格。
猜你喜欢
  • 2011-05-03
  • 2020-04-29
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 1970-01-01
相关资源
最近更新 更多