bgo*_*odr 7 linker cmake static-libraries
与使用cmake将目标文件链接到lib.xxxx.a文件相关,但不完全相同,我使用CMake 2.8.x使用VS2008 SP1在Windows上构建了几个静态库.有没有办法通过CMake单独将所有现有静态库中的所有.obj文件重新链接到一个更大的单片库中,最好是通过add_libraryCMake函数或其他类似的构造?
我认为答案是"不",因此我考虑通过常规add_custom_command+ add_custom_target方法通过自定义命令滚动自己,通过在调用时提供所有其他库.obj文件,只需手动构建库LINK.EXE.但我发现这种方法存在一些问题:
LINK.EXE可执行文件的完全限定路径.然后,我必须以某种方式推导出LINK.EXE使用脆弱启发式的路径:在不同的Visual Studio版本可能将LINK.EXE文件定位在不同目录中的意义上它是脆弱的,我需要这个工作用于32位和64位位Windows编译器条件,并且能够抵御VS2008与未来编译器修订版之间的升级.LINK.EXE,以便将它们添加到命令行,因此FILE(GLOB...)在这种情况下,构造将是我最好的第二种选择.LINK.EXE通过:来调用LINK.EXE /OUT:monolithic.lib lib1.lib lib2.lib ...,但也许并不是所有的.obj都会被包括在内(编辑:我已经确认LINK.EXE省略了一些.obj文件lib1.lib lib2.lib ...而没有任何诊断消息解释原因,所以这种方法是非首发的); 关于LINK.EXE这一点,在线文档尚不清楚.有没有LINK.EXE以这种方式使用的经验?谢谢,
黑雁
PS,我知道如何使用CMake创建DLL,但我特别不想在此时构建DLL.
Vla*_*oub 11
使用虚拟源文件创建一个"合并"的静态库,并添加要合并到STATIC_LIBRARY_FLAGS的库,这样它们将成为lib.exe的附加输入.
这将是这样的:
ADD_LIBRARY(合并的STATIC dummy.c)
SET_TARGET_PROPERTIES(合并属性
STATIC_LIBRARY_FLAGS"完整\路径\到\ lib1.lib完整\路径\到\ lib2.lib")
这种方法在MySQL内部使用,这里有一个更通用的宏来合并工作于crosss-platform的静态库.它可以在这里找到http://www.mail-archive.com/cmake@cmake.org/msg28670/libutils.cmake
| 归档时间: |
|
| 查看次数: |
5672 次 |
| 最近记录: |