如何正确地向项目添加资源?

时间:2011-05-20 21:34:27

标签: xcode resources makefile cmake share

我的项目组织如下:

  • include/
  • src/
  • share/myprogram/

其中share/myprogram/包含资源。 我的程序正在使用相对路径访问这些资源。可执行文件希望在../share/myprogram/中找到它们。

我想跑的时候:

mkdir build
cd build
cmake ..
make

要实现以下目标:

  • 制作bin目录
  • 编译并将可执行文件放入bin/
  • 复制share目录中的build目录

我正在寻找一种干净的方式来做到这一点。理想情况下,我希望CMake 知道知道资源作为资源
我知道我可以使用复制自定义命令。这是实现这一目标的唯一途径吗?

加成

如果在使用Xcode生成器时资源可以出现在Xcode中的 Resources 下,并且副本在mybin目标下是一个干净的复制阶段,那将是非常棒的(这就是我所说的CMake了解资源作为资源。)


更新

到目前为止我所拥有的:

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
add_executable(mybin ${Headers} ${Sources})

add_custom_target(
    Resources ALL
    ${CMAKE_COMMAND} -E copy_directory ${PROJECT_SOURCE_DIR}/share ${PROJECT_BINARY_DIR}/share
    SOURCES ${Resources}
)

2 个答案:

答案 0 :(得分:2)

您可以使用 Configure_file 将文件从源目录复制到二进制目录。它有参数 Copyonly

答案 1 :(得分:0)

我正在使用unix命令行工具,我没有使用Mac OS X捆绑包,Xcode的资源文件夹仅用于捆绑资源,所以忘记奖金。

我意识到我没有正确地做事。 使用相对路径访问资源是不可靠的,因为程序可以从任何地方执行。 我所做的是在文件夹的层次结构中查找资源,从用户指定,到环境变量,到相关目录,最后到标准的unix目录。

实际上,不再需要构建期间的复制阶段。只有安装才重要,而且非常简单:

install(DIRECTORY share/ DESTINATION share)

仅供参考,我保留了我的custom_target,因为我喜欢在Xcode中显示资源,并且调用它Resources使它变得漂亮:)