【发布时间】:2020-07-09 18:19:45
【问题描述】:
由于非常特殊的需要,我有一个静态库,我需要在创建后对其进行“后期处理”。所以我有这个:
add_library(CANopenNode2 STATIC
...)
add_custom_command(TARGET CANopenNode2 POST_BUILD
COMMAND objcopy --redefine-syms=renames.txt $<TARGET_FILE:CANopenNode2>)
我的问题是整个构建步骤不依赖于renames.txt 常规文件 - 如果我更改它,库不会重新归档或重新处理。 add_custom_command(TARGET ... POST_BUILD ...) 签名不接受任何 DEPENDS 参数。我尝试了一些常规技巧来创建自定义命令(取决于该文件),包装在自定义目标中,然后将其标记为我的静态库 CANopenNode2 的依赖项,但我很可能做错了什么,因为它确实根本不工作。由于我稍后需要将此“后处理”库链接到我的可执行文件,因此我更愿意以某种方式使用POST_BUILD,因为我猜想使用常规自定义命令(可能取决于文件)也会很复杂,只是在其他方面,但我显然愿意接受建议。
有没有什么方法可以让整个库依赖于这个常规文件,或者这又是 CMake 变得极其复杂的另一件事?
【问题讨论】:
-
@Tsyvarev - 感谢您提供的信息。我知道
LINK_DEPENDS,但这只会影响最终二进制文件的链接。如果我为我的情况这样做,那么当常规文件更改时,库不会重新归档和重新处理 - 只有最终的可执行文件会再次重新链接...... -
对不起,错过了构建没有链接步骤的静态库的点,只有编译一个。 OBJECT_DEPENDS 属性是否适合您,如that question 及其答案中所述?我可以“交换”重复的引用,但如果您觉得您的问题需要一个完全不同的答案,我会重新打开它。
-
@Tsyvarev - 最后我选择了
add_custom_command(),它生成一个空源(取决于我的常规文件),然后与库一起存档。在我的情况下,添加OBJECT_DEPENDS很不方便,因为我实际上编译了两次文件,但我只需要对库的一份副本进行后处理。 -
好的,我重新打开了这个问题。随意写下你的答案。
标签: cmake