Linker 使用VS2008 SP1和CMake 2.8.x将多个静态.lib文件链接到一个单一的.lib文件
与此相关,但不完全相同,我在Windows上使用CMake 2.8.x和VS2008 SP1构建了几个静态库。是否有办法仅通过CMake将所有现有静态库中的所有.obj文件重新链接到一个更大的单片库中,最好是通过Linker 使用VS2008 SP1和CMake 2.8.x将多个静态.lib文件链接到一个单一的.lib文件,linker,cmake,static-libraries,Linker,Cmake,Static Libraries,与此相关,但不完全相同,我在Windows上使用CMake 2.8.x和VS2008 SP1构建了几个静态库。是否有办法仅通过CMake将所有现有静态库中的所有.obj文件重新链接到一个更大的单片库中,最好是通过add_libraryCMake函数或其他类似构造 我认为答案是“否”,因此我考虑过通过一个自定义命令,通过通常的add\u custom\u命令+add\u custom\u target方法,通过调用LINK.EXE时提供所有其他库.obj文件,手动构建库。但我发现这种方法存在一些问
add_library
CMake函数或其他类似构造
我认为答案是“否”,因此我考虑过通过一个自定义命令,通过通常的add\u custom\u命令
+add\u custom\u target
方法,通过调用LINK.EXE
时提供所有其他库.obj文件,手动构建库。但我发现这种方法存在一些问题:
LINK.EXE
可执行文件的完全限定路径。然后,我将不得不以某种方式使用脆弱的启发式方法导出LINK.EXE
的路径:不同的Visual Studio版本可能会将LINK.EXE
文件定位在不同的目录中,这是脆弱的,我需要它在32位和64位Windows编译器条件下工作,在VS2008和未来的编译器版本之间进行升级时具有弹性LINK.EXE
命令行而从.lib文件中提取.obj文件,因此在这种情况下,文件(GLOB…
构造将是我最好的第二种选择LINK.EXE/OUT:smothetical.lib lib1.lib lib2.lib…
调用LINK.EXE
,但可能不包括所有.obj(编辑:我已经确认,LINK.EXE
省略了lib1.lib lib2.lib中的一些.obj文件…
,没有任何诊断消息解释原因,因此这种方法是不可行的)LINK.EXE
的在线文档对此不清楚。有没有人有过以这种方式使用LINK.EXE
的经验静态\u库\u标志“full\path\to\lib1.lib full\path\to\lib2.lib”)
这种方法在MySQL内部使用,这里有一个更通用的宏来合并跨平台工作的静态库。可以在这里找到它merge_static_LIBS宏,在链接中定义的宏与我将要实现的非常接近。警告:该链接指向特定于MySQL的文件,因此必须对其进行一般化在实践中可行。上述libutils.cmake确实不能独立工作,因为它引用了可配置的merge_archives_unix.cmake。此文件中的