我想将包含文件嵌套在包含文件中。为啥我不能在 Inno Setup 中这样做?

Posted

技术标签:

【中文标题】我想将包含文件嵌套在包含文件中。为啥我不能在 Inno Setup 中这样做?【英文标题】:I want to nest include files inside include files. Why cant I do that in Inno Setup?我想将包含文件嵌套在包含文件中。为什么我不能在 Inno Setup 中这样做? 【发布时间】:2015-12-14 21:40:53 【问题描述】:

假设我有一个 Inno 设置文件(我们称之为 master.iss),其中包含如下文件部分:

[Files]
#include PathToIncludeFile\IncludeFile.iss

这很好用。 IncludeFile.iss 的内容被有效地插入到存在#includemaster.iss 文件中。

所以现在我想将#include 文件的内容嵌套在更多包含中。所以IncludeFile.iss 看起来像这样:

#include C:\PathToFile\FileWithRealFilesDataForProject1.iss
#include C:\PathToFile\FileWithRealFilesDataForProject2.iss
#include C:\PathToFile\FileWithRealFilesDataForProject3.iss
#include C:\PathToFile\FileWithRealFilesDataForProject4.iss
#include C:\PathToFile\FileWithRealFilesDataForProject5.iss
#include C:\PathToFile\FileWithRealFilesDataForProject6.iss

Inno Setup 的编译器编译 Master.iss 会说

(文件:PathToIncludeFile\IncludeFile.iss \n 第 1 行:\n 第 11 列:) [ISSP] 未声明的标识符 C"

我想我可以使用批处理文件或其他东西来实现我想要的,但如果我可以使用嵌套的 #includes 来实现这一点,那就更直接了。

顺便说一句:我当前的 Inno Setup Compiler 是 5.5.6 (u)

【问题讨论】:

【参考方案1】:

您可以嵌套包含文件。


您的问题是,在 Inno Setup 预处理器中,字符串文字必须用双引号(或单引号)括起来,例如:

#include "C:\PathToFile\FileWithRealFilesDataForProject1.iss"

当您省略引号时,预处理器会尝试将 #include 参数解释为表达式。因此,它将C(前导字母数字序列)视为标识符。

在 Inno Setup Preprocessor 文档中查看这些主题:

Expression Syntax。 #include 指令

出于同样的原因,您在帖子中的主要包含方式也不会编译。你必须用双引号括起来。

为此:

#include PathToIncludeFile\IncludeFile.iss

我来了

[ISPP] 未声明的标识符:“PathToIncludeFile”。

(如预期)

【讨论】:

以上是关于我想将包含文件嵌套在包含文件中。为啥我不能在 Inno Setup 中这样做?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我不能在 if 标记内嵌套块标记?

为啥我的编译防护不能防止多个定义包含?

为啥编译包含静态嵌套类的类会创建一个名为“EnclosureClass$1”的新 .class 文件? [复制]

问个问题,为啥我定义的static函数能被其他源文件调用。

如何使用ant解压缩包含嵌套的zip文件?

如何在某些头文件(嵌套类)的 cpp 文件中包含我的实现