此问题在此处已有答案:
CMake: Source file depends on source file(2个答案)
12天前关闭
我正在用CMake做一个二进制资源 Package 工具,它是通过内联汇编.incbin
指令实现的。简单来说,它是这样工作的:
- CMake脚本获取一个输入文件列表,通过
configure_file
命令生成一个源文件(我们称之为rcs_bundle.cpp
)。生成的源文件大多包含一个大型内联汇编,其中包含了.incbin
的所有输入文件:
__asm__(
".const_data\n"
".globl _data1_BEGIN\n"
".balign 16\n"
"_data1_BEGIN:\n"
".incbin \"/full/path/to/data1\"\n"
// omit data1 size generation lines that are not important in this topic
".globl _data2_BEGIN\n"
".balign 16\n"
"_data2_BEGIN:\n"
".incbin \"/full/path/to/data2\"\n"
// omit data2 size generation lines that are not important in this topic
// and many more resources ......
".text\n");
字符串
1.静态库的生成方式与add_library(rcs_lib STATIC rcs_bundle.cpp)
类似,并在本产品的其他部分中使用。
问题来了。理想情况下,当任何数据文件被更改时,rcs_lib
应该自动重新编译。然而,CMake目标并不知道它对这些数据文件的依赖性,因为.incbin
不被任何依赖性步行者识别。CMake没有提供手动指定文件级依赖性的方法,因为add_dependencies
只在目标上工作。
我还尝试创建一个假目标,并像这样指定依赖项:
add_custom_target(rcs_lib_deps DEPENDS /full/path/to/data1 /full/path/to/data2)
add_dependencies(rcs_lib rcs_lib_deps)
型
但这根本行不通。
那么有没有办法在CMake中添加文件依赖项呢?因为这种方法只会在Mac中使用,所以有没有Clang编译器指令来手动指定C++源代码中的依赖项?
1条答案
按热度按时间rnmwe5a21#
就我对incbin的理解而言,从rcs_rule. cpp生成目标文件取决于文件。在这种情况下,你应该:
字符串
相反,如果 linking rsc_lib依赖于文件(例如使用自定义链接脚本),则需要在库上设置一个属性:
型