我的项目组织如下:
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}
)
答案 0 :(得分:2)
您可以使用 Configure_file 将文件从源目录复制到二进制目录。它有参数 Copyonly 。
答案 1 :(得分:0)
我正在使用unix命令行工具,我没有使用Mac OS X捆绑包,Xcode的资源文件夹仅用于捆绑资源,所以忘记奖金。
我意识到我没有正确地做事。 使用相对路径访问资源是不可靠的,因为程序可以从任何地方执行。 我所做的是在文件夹的层次结构中查找资源,从用户指定,到环境变量,到相关目录,最后到标准的unix目录。
实际上,不再需要构建期间的复制阶段。只有安装才重要,而且非常简单:
install(DIRECTORY share/ DESTINATION share)
仅供参考,我保留了我的custom_target
,因为我喜欢在Xcode中显示资源,并且调用它Resources
使它变得漂亮:)