C++ 链接器的CMake生成器表达式
我想使用CMake和Visual Studio(lib.exe)将几个静态库文件合并到一个库中。我想通过设置将文件列表传递给链接器C++ 链接器的CMake生成器表达式,c++,visual-studio,linker,cmake,C++,Visual Studio,Linker,Cmake,我想使用CMake和Visual Studio(lib.exe)将几个静态库文件合并到一个库中。我想通过设置将文件列表传递给链接器 set_target_properties(biglib PROPERTIES STATIC_LIBRARY_FLAGS "/unknown/path/lib1.lib /unknown/path/lib2.lib") 但是,在配置时路径未知。所以我尝试使用生成器表达式: set_target_prope
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>")
设置\u目标\u属性(biglib属性静态\u库\u标志
"$ $")
lib1和lib2是在其他地方定义的内部库目标。
表达式似乎没有计算,因为链接器正在搜索$
,当然找不到
我不知道我想做的事是否会奏效。也许有人可以解释在这种情况下如何实际使用生成器表达式。我是否需要以某种方式使用add_custom_命令?合并静态库是一项相对复杂的任务,它还依赖于平台和编译器。例如,对于Linux/gcc,您需要通过ar从库中提取所有对象,然后将它们合并回合并库 我建议使用脚本中的宏MERGE_STATIC_LIBS,如下所述:
对于Linux/Unix,您还需要。您可以将lib1和lib2目标定义为对象库:
add_library(lib1 OBJECT ${lib1_src})
add_library(lib2 OBJECT ${lib2_src})
add_library(biglib STATIC $<TARGET_OBJECTS:lib1> $<TARGET_OBJECTS:lib2>)
add_库(lib1对象${lib1_src})
添加库(lib2对象${lib2\u src})
添加库(biglib STATIC$$)
根据的文档,此处不允许使用生成器表达式(例如,与属性进行比较)。看起来在这里,add_custom_命令
更合适:合并库与构建库不同。OP明确指出跨平台兼容性不是必需的(“使用CMake和Visual Studio”)。