我正在使用内联汇编和.incbin将源文件嵌入到另一个源文件中,这就像我想要的那样。我不会接受标准的objcopy方法,虽然它是(imho)较小的方法。xxd也是一种选择,但实际上只适用于非常小的包含。我有一个静态站点构建器,它需要大量的资源并将其打包到一个程序中,使用. incbin非常快速。
不幸的是,将JS文件添加到源列表中是不够的:
ninja explain: output CMakeFiles/jsapp.dir/static_site.c.o older than most recent input static_site.c (1629797306094133842 vs 1629797311521966739)
ninja explain: CMakeFiles/jsapp.dir/static_site.c.o is dirty
ninja explain: jsapp is dirty
[2/2] Linking C executable jsapp
字符串
嵌入JS的主C文件没有被重建,但是与此无关的静态站点源代码是因为时间戳改变了。
如何告诉CMake source.c现在依赖于some_file.js?
2条答案
按热度按时间6ju8rftf1#
按照@arrowd的想法:
字符串
工作得很好。
fruv7luv2#
我最近也在做同样的工作,我被从我自己的重复问题重定向到这个问题。
根据CMake official documentation,
OBJECT_DEPENDS
属性只对 makefile 和 ninja 生成器有效,但对 Visual Studio 和 XCode 等IDE生成器无效。所以我尝试了另一种方法。简而言之:rcs_asm.cpp
),其他辅助代码部分(在我的情况下存在)被生成到另一个C++文件(比如rcs_blob.cpp
)。cmake_custom_command
将rcs_asm.cpp
手动编译为对象文件(假设为rcs_asm.o
),这允许您指定文件级依赖关系:字符串
型
pure-inline-assembly部分make
rcs_asm.cpp
的分离不需要优化标志,所以你不需要在不同的构建类型中编译它们的标志,因此不需要使用讨厌的生成器表达式。