【问题标题】:Gradle native c++ non source files resources or assets folder location?Gradle本机c ++非源文件资源或资产文件夹位置?
【发布时间】:2018-01-08 23:14:31
【问题描述】:

上下文:我主要是一名 Java 开发人员,我在所有构建中都使用 gradle。作为一种爱好,我一直在玩 C/C++,发现 gradle 也有能力构建这些。因此,我认为我会使用 gradle,而不是仅仅为一些小型业余项目学习 cmake/make。

问题:如何定义非源文件的位置?

使用 Java 有一个资源文件夹,您可以将图像、文本文件等内容放入其中,而 gradle 会将这些内容放入 jar 中,因此在您的代码中您可以很容易地使用相对路径加载它们。

src > main > java 用于源文件。

src > main > 资源资源。

对于 c++ 项目是否有等效的方法来执行此操作?

此外,如果有一个默认文件夹很高兴知道,而且如何在 build.gradle 文件中将其定义到不同的位置,也将不胜感激。

这里是我现在的简单构建文件供参考:

apply plugin: "cpp"

model {
  components {
    main(NativeExecutableSpec) {
      sources {
        cpp {
          source {
            srcDir "src"
          }
        }
      }
    }
  }
}

在我的代码中,我希望能够加载图像,例如:

HoweverYouLoadAnImageInCpp("imageName.png");

虽然具有简单的结构,例如:

root
--src
--images

如果目前没有办法做到这一点,是否有解决方法或更标准的方式人们在 C/C++ 中做到这一点?

【问题讨论】:

  • 这在纯 C 或 C++ 中是不可能的,平台可以解决这个问题,例如 windows 有捆绑到构建可执行文件中的资源文件。我不知道 *nix 有什么等价物。
  • 我没有完全考虑到可能无法将资产捆绑在可执行文件中。那么资产存储在可执行文件之外的单独文件夹中并以这种方式访问​​是否很常见?也许将资产复制到构建输出中的并行文件夹。

标签: c++ file gradle path assets


【解决方案1】:

如 cmets 中所述,与 java 中的 jars 不同,c/c++ 似乎没有将资产包含在可执行文件中的标准方式。似乎确实有特定于平台的方式,并且 gradle 似乎确实支持 Windows 资源文件,所以如果这是您正在寻找的内容,请参阅 gradle 文档。

虽然我不想做任何特定于平台的事情,所以我想我会用我决定做的事情来回答这个问题,以防其他人发现这个问题有类似的需求。如果弹出另一个更好的答案,我注意到我会更改选择。

最后,可执行文件将查找相对于它执行位置的路径(至少据我所知)。所以我只是做了一个复制任务,将资产放在一个并行文件夹中。

task copyAssets {
  copy {
    from "."
    into "build/exe/main"
    include "images/**" // This will take the whole images folder from project root
  }
}

build.dependsOn copyAssets

因此,当我现在 gradle build 时,它会将我的图像文件夹复制到它构建我的“主要”cpp 源可执行文件的同一文件夹中。在我的代码中,我可以通过以下方式访问这些图像:

HoweverYouGetImages("images/imagename.png");

当然,您可以更喜欢您的任务并将其压缩或压缩图像并在加载代码时解压缩。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多