相关疑难解决方法(0)

使用CMake 2.8.x使用VS2008 SP1将多个静态.lib文件链接到一个单片.lib文件中

使用cmake将目标文件链接到lib.xxxx.a文件相关,但不完全相同,我使用CMake 2.8.x使用VS2008 SP1在Windows上构建了几个静态库.有没有办法通过CMake单独将所有现有静态库中的所有.obj文件重新链接到一个更大的单片库中,最好是通过add_libraryCMake函数或其他类似的构造?

我认为答案是"不",因此我考虑通过常规add_custom_command+ add_custom_target方法通过自定义命令滚动自己,通过在调用时提供所有其他库.obj文件,只需手动构建库LINK.EXE.但我发现这种方法存在一些问题:

  1. 我找不到一个CMake变量来指示LINK.EXE可执行文件的完全限定路径.然后,我必须以某种方式推导出LINK.EXE使用脆弱启发式的路径:在不同的Visual Studio版本可能将LINK.EXE文件定位在不同目录中的意义上它是脆弱的,我需要这个工作用于32位和64位位Windows编译器条件,并且能够抵御VS2008与未来编译器修订版之间的升级.
  2. 我必须找到一种方法来查找其他静态库的所有.obj文件,在构建时在CMake时,因为在CMake时,.obj文件当然不存在(总是).出于构建性能的原因,我希望不要从.lib文件中提取.obj文件LINK.EXE,以便将它们添加到命令行,因此FILE(GLOB...)在这种情况下,构造将是我最好的第二种选择.
  3. 也许可以简单地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.

linker cmake static-libraries

7
推荐指数
1
解决办法
5672
查看次数

如何在CMake中删除"可能无法从目标读取位置属性"错误?

我现在正在尝试在这篇文章中运行一个cmake脚本.使用此脚本,CMake将打印目标的所有属性.但是,当它尝试检索目标的"LOCATION"属性时,会发现以下错误:

The LOCATION property may not be read from target "abc".  Use the target
  name directly with add_custom_command, or use the generator expression
  $<TARGET_FILE>, as appropriate.
Run Code Online (Sandbox Code Playgroud)

然后我尝试打印属性LOCATION,它也不起作用.有任何想法吗?

cmake

7
推荐指数
1
解决办法
2077
查看次数

标签 统计

cmake ×2

linker ×1

static-libraries ×1