CMake源代码中的资源,用于构建和安装

时间:2017-09-13 23:43:10

标签: cmake installation resources

多年来我一直在想这个问题。它是关于在代码中使用带有CMake的资源文件,以便在构建目录中运行时和安装时可以访问它们。

假设您拥有在名为res的顶级目录中运行程序所需的文件。它包含res / file1.txt和res / file2.txt。您构建此程序并将资源复制到构建目录,在该目录中可以在开发期间运行该程序。然后,程序与资源一起安装到/ usr / share / my_program或其他东西,程序通过访问这些文件运行。问题是如何在源代码中执行操作,以便在从构建目录运行和安装时,相同的代码可以正常工作。我已经看到了几个不同的答案,如何处理资源,但每个似乎都有一个缺陷:

  1. 程序在一些预先配置的绝对目录中搜索,例如CMAKE_INSTALL_PREFIX / share / my_program,必须先安装才能运行,不适合在开发过程中使用。
  2. 找到一些方法来使用二进制文件的相对路径,但我不知道这是如何工作的,因为构建树不会镜像已安装的文件路径,而是安装到bin并共享目录。
  3. 使用CMake变量区分两者,以便在一个场景中搜索相对路径,或在另一个场景中搜索安装位置。这可能只是调试/发布变量。它还需要在安装之前重新运行CMake以使用新的资源路径进行重建。
  4. 将文件烘焙到可执行文件中。在处理大多数资源时似乎没有成功,因为它们可能只是被打开而且对于大型文件目录可能不方便。
  5. 这些是最佳解决方案之一吗?有什么我不是误会吗?我总是在印象中,应该能够在安装之前从构建目录运行程序以查看它们是否有效。如果可能,我想知道CMake和C / C ++代码的外观,例如open("my_resource_location");my_cmake_command()。我所看到的与资源相关的大部分答案都不包含这两个问题。

0 个答案:

没有答案