我想使用 CMake 和 Visual Studio (lib.exe) 将几个静态库文件合并到一个库中。我想通过设置
将文件列表传递给链接器set_target_properties(biglib PROPERTIES STATIC_LIBRARY_FLAGS
"/unknown/path/lib1.lib /unknown/path/lib2.lib")
但是,路径在配置时是未知的。所以我尝试使用生成器表达式:
set_target_properties(biglib PROPERTIES STATIC_LIBRARY_FLAGS
"$<TARGET_FILE:lib1> $<TARGET_FILE:lib2>")
lib1 和 lib2 是在别处定义的内部库目标。
该表达式似乎未被评估,因为链接器正在搜索 $<TARGET_FILE:lib1>
当然没有找到。
我不知道我正在尝试做的事情是否会奏效。也许有人可以解释在这种情况下如何实际使用生成器表达式。我需要以某种方式使用 add_custom_command 吗?
最佳答案
合并静态库是一项相对复杂的任务,而且还依赖于平台和编译器。例如,对于 Linux/gcc,您需要通过 ar 从库中提取所有对象,然后将它们组合回合并库。
我建议使用 libutils.cmake 中的宏 MERGE_STATIC_LIBS|脚本,如此处所述:https://stackoverflow.com/a/4736442/1274747
对于 Linux/Unix,您需要 merge_archives_unix.cmake.in
关于c++ - CMake 生成器表达式到链接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35010283/