Gradle 本机 c++ 非源文件资源或资产文件夹位置?

Gradle native c++ non source files resources or assets folder location?

上下文: 我主要是一名 Java 开发人员,我使用 gradle 进行所有构建。作为一种爱好,我一直在玩 C/C++ 并发现 gradle 也有能力构建这些。因此,与其学习 cmake/make 只是为了一些小的爱好项目,我想我会使用 gradle 因为我熟悉它。

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

使用 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++ 中是否有解决方法或更标准的方法?

如评论中所述,与 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 构建时,它会将我的图像文件夹复制到它构建我的 'main' cpp 源可执行文件的同一文件夹。在我的代码中,我可以通过以下方式访问这些图像:

HoweverYouGetImages("images/imagename.png");

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