makefile中变量的大小是否有限制

时间:2017-10-13 13:52:41

标签: makefile

我一直在为包含项目的makefile添加源代码。就像现在一样,它完美运行。但是,如果我取消注释代码中指示的两行,请吐出以下错误:

+------+--------------------------------------------------------------------------+
| ix   | nam                                                                      |
+------+--------------------------------------------------------------------------+
|    1 | áäčďéíĺľňóôŕřšťú ýžÁ ČĎÉÍĹĽŇÓ ŔŘŠŤÚ ÝŽ                                   |
|    2 | aacdeillnoorrstuuyzAACDEILLNOORRSTUUYZ                                   |
+------+--------------------------------------------------------------------------+
+--------------------------+--------------------------------------------------------------------+
| Variable_name            | Value                                                              |
+--------------------------+--------------------------------------------------------------------+
| character_set_client     | utf8                                                               |
| character_set_connection | utf8                                                               |
| character_set_database   | utf8                                                               |
| character_set_filesystem | binary                                                             |
| character_set_results    | utf8                                                               |
| character_set_server     | utf8                                                               |
| character_set_system     | utf8                                                               |
+--------------------------+--------------------------------------------------------------------+

我认为,因为它只是切断了它的长度。如果这是变量长度的某些限制,有什么方法吗?

make: *** No rule to make target 'engine/obj/graphics/window.o', needed by 'lib/engine.a'.  Stop.

1 个答案:

答案 0 :(得分:1)

make中变量的大小没有限制(系统内存量除外)。您的操作系统将强制命令行的大小可以调用,所以如果您的变量非常大并且您尝试在配方中使用它们,操作系统可能不允许它,但这无关紧要用make而不是你在这里看到的问题。

我认为问题是文件$(ENGINE_SOURCE_DIR)/graphics/instance_buffer.cpp不存在或由于某种原因无法访问。

这条规则非常破碎:

$(ENGINE_OBJECT_DIR)/%.o: $(ENGINE_SOURCE_DIR)/%.cpp $(ENGINE_SOURCES)
        $(CXX) -I$(ENGINE_HEADER_DIR)  -c -o $@ $< $(CXXFLAGS)

通过在此处添加$(ENGINE_SOURCES),您可以说如果任何源文件发生更改,则必须重建目标文件的 ALL 。我无法相信这就是你想要的(如果你想重建所有文件,如果任何文件发生变化,你可以编写一个总是重建所有内容的shell脚本,而你根本不需要make。)

不仅如此,如果make无法找到或构建 ALL 源文件,那么此模式规则将不匹配,make将继续查看其他模式规则是否匹配。在这种情况下,没有其他的,所以只是说“嘿,我不知道如何构建文件”(在这种情况下,.../window.o文件)。

此外,如果你运行make with debugging(make -d)你会看到问题(虽然输出很大,所以你可能需要将它重定向到一个文件并用编辑器或更少的东西检查这让你可以来回搜索和翻页。

您应该从此规则中删除$(ENGINE_SOURCES)。然后,可能make会因更合理的错误而失败,因为它无法构建.../instance_buffer.o