【发布时间】:2021-09-23 05:48:47
【问题描述】:
我正在尝试通过为 i686-w64-mingw32 构建的 GNU Make 4.3 运行 Makefile。 Makefile 中的一行代码以下列方式使用通配符函数来尝试获取工作目录中每个 .c 文件的名称。但是,文件的名称总是被截断,或者在某些情况下被彻底删除。例如,我制作了一堆文件:
touch Makefile m_test1.c m_test2.c test_1.c test_2.c test_t1.c test_t2.c test1.c test2.c
并用以下内容填充 Makefile:
SRC_C = $(wildcard *.c)
print1:
$(info $$SRC_C is [${SRC_C}])
但是,控制台会打印以下内容:
$SRC_C is [1.c 2.c t1.c t1.c t2.c t2.c]
【问题讨论】:
-
你显示的输出不能和你得到的完全一样:
$(info $$SRC_C...)绝对不可能输出#SRC_C...。请准确复制粘贴,每个细节都很重要。并检查您的文件名。因为您显然是在 Windows 环境中,所以我不会对它们包含各种字符(包括不可打印的字符)感到惊讶。 -
无法在此处重现(GNU Make 4.3)。我的猜测是您显示的文件名不是您拥有的文件名。
-
@RenaudPacalet 我希望是这样。这些测试文件甚至不是我发现的,只是碰巧发生在这些文件上;我只是制作了这些文件,看看问题是否可重现。在此之前我在这个测试 Makefile 中也没有做任何事情,你看到的和你看到的结果正是我得到的,这就是我如此困惑的原因。我发现这一点的方法不是通过使用
$(info $$SRC_C is [${SRC_C}])打印,而是因为链接器尝试链接但未能找到的目标文件是这些相同的文件名。 -
但是,例如,您如何解释这个
#而不是预期的$? -
@RenaudPacalet 啊,抱歉,我发帖时打错了。应该是$ (我现在刚刚检查并验证了它)