【问题标题】:Escaping spaces in LIBS path Makefile在 LIBS 路径 Makefile 中转义空格
【发布时间】:2021-10-11 10:40:02
【问题描述】:

我正在尝试包含来自 here 的 Eclipse Mosquitto 库示例 mosquitto 示例

我正在尝试使用 Makefile 来构建和编译代码。

我遇到的问题是编译器/链接器/任何东西都找不到位于 C:\Program Files\Mosquitto\devel 的 mosquitto 库。 这是错误:

mqtt-hostlink> make
gcc -Wall -o main main.c -LC:\\Program ,_,Files\\Mosquitto\\devel\mosquitto.lib
gcc: error: ,_,Files\Mosquitto\devel\mosquitto.lib: No such file or directory
make: *** [Makefile:11: make] Error 1

这是我的 Makefile:

CC = gcc
null      :=
SPACE     := $(null) $(null)

LIBS = -LC:\\Program$(SPACE),_,Files\\Mosquitto\\devel\mosquitto.lib

%.o: %.c 
    $(CC) -c -o $@ $< 

make: main.c
    $(CC) -Wall -o main $^ $(LIBS)

.PHONY: clean

我提到的“空间”方法:How to escape spaces inside a Makefile

【问题讨论】:

  • LIBS = "C:\\Program Files\\Mosquitto\\devel\\mosquitto.lib" 怎么样?选项-L 用于指定包含库文件的目录,而不是库文件本身。顺便说一句:Makefile 规则 make: main.c 应该在您的命令创建 main 时创建文件 make
  • @Bodo 对不起,我听不懂最后一句话。您的意思是使用命令make: main.c 创建一个名为make 的文件?
  • @hweiu321 -L 用于指定库的搜索目录,-l 用于指定要绑定的库,您可以这样尝试 LIBS = "C:\\Program Files\ \Mosquitto\\devel -lmosquitto",不确定make是否会追加.lib,你也可以试试"LIBS=-l C:\\Program Files\\Mosquitto\\devel\\mosquitto.lib"

标签: c makefile libmosquitto


【解决方案1】:

您可以只使用 tar 目录的简称。列出带有 /X 选项的目录,如下所示

C:\>dir /X p*


 Directory of C:\

09/06/2021  02:24 PM    <DIR>          PROGRA~1     Program Files
09/06/2021  01:29 PM    <DIR>          PROGRA~2     Program Files (x86)
               0 File(s)              0 bytes

那就用PROGRA~1代替Program Files

【讨论】:

  • 它给出了这个错误。我认为make 不理解~ 的简写。 gcc -Wall -o main main.c "C:\Program~1\Mosquitto\devel\mosquitto.lib" gcc.exe: error: C:\Program~1\Mosquitto\devel\mosquitto.lib: No such file or directory make: *** [Makefile:11: make] Error 1
【解决方案2】:

这里有些混乱。那篇文章是关于如何从 make 函数中转义空格。您没有尝试在这里调用任何 make 函数,您只是尝试在命令行中使用变量。没有必要逃避任何东西。

您需要做的是从 shell 中转义空格,而不是从 make 中转义。你可以很容易地做到这一点,只需使用引号。无需花哨的制作操作。我建议您也使用正斜杠,而不是反斜杠。几乎所有 Windows 程序都接受正斜杠和反斜杠。只有 cmd.exe 内置插件不会。

LIBS = "-LC:/Program Files/Mosquitto/devel/mosquitto.lib"

【讨论】:

  • 但是当我运行make时,编译器仍然检测不到#include 头文件。
  • @hweiu321 要为#include 定义搜索目录,您需要选项-I。假设您更新了 Makefile,请编辑您的问题,追加新版本并复制并粘贴执行的编译命令和完整的错误消息。
  • 您向我们展示的错误是链接器错误。没有关于您的问题中缺少头文件的消息。
猜你喜欢
  • 2021-12-05
  • 2011-11-27
  • 2013-08-01
  • 2015-07-18
  • 2019-01-08
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 1970-01-01
相关资源
最近更新 更多