代码之家  ›  专栏  ›  技术社区  ›  Mimerr

Gradle native c++非源文件资源或资源文件夹位置?

  •  0
  • Mimerr  · 技术社区  · 7 年前

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

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

    有了Java,就有了一个资源文件夹,您可以将图像、文本文件等内容放入其中。。。in和gradle将把这些放在jar中,这样在代码中就可以很容易地用相对路径加载它们。

    src>主(>);源文件的java。

    src>主(>);资产资源。

    对于c++项目,有没有一种等效的方法可以做到这一点?

    另外,如果有一个默认文件夹,那么最好了解它,以及如何在构建中定义它。如果您能将文件转到其他位置,也将不胜感激。

    以下是我现在的简单构建文件供参考:

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

    在我的代码中,我希望能够加载图像,例如,具有以下内容:

    HoweverYouLoadAnImageInCpp("imageName.png");
    

    结构简单,如:

    root
    --src
    --images
    

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mimerr    7 年前

    正如注释中提到的,与java中的JAR不同,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
    

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

    HoweverYouGetImages("images/imagename.png");
    

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