【问题标题】:How to set Visual-Studio LinkLibraryDependencies property to yes through CMAKE如何通过 CMAKE 将 Visual-Studio LinkLibraryDependencies 属性设置为 yes
【发布时间】:2017-02-06 12:20:27
【问题描述】:

当我使用 cmake 生成 Visual Studio 目标时,生成的项目文件在平台属性部分包含以下内容:

<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    ...
    <ProjectReference>
      <LinkLibraryDependencies>false</LinkLibraryDependencies>
    </ProjectReference>
    ...
</ItemDefinitionGroup>

我想将 CMakeLists 文件中的属性设置为 true。我该怎么做?

我的项目依赖是使用TARGET_LINK_LIBRARIES设置的,但在Linux上我也可以使用,例如:

TARGET_LINK_LIBRARIES(${targetname} "-Wl,--whole-archive" *some libs* "-Wl,--no-whole-archive")

这会强制所有符号链接到目标。

使用 Visual Studio 链接所有符号的方法是指定:

<LinkLibraryDependencies>true</LinkLibraryDependencies>

通过项目设置。

【问题讨论】:

  • 这闻起来很像XY problem。您想通过将此属性设置为 true 来实现什么?在 CMake 中,您应该使用 CMake (target_link_libraries()) 来表达链接依赖关系,而不是使用不适用于其他生成器(Makefile 等)的特定于生成器的东西
  • 不是用来设置依赖的。我确实为此使用了 target_link_libraries() 。我将编辑我的问题并添加更多详细信息。
  • 你不能。请参阅 here:“事实上,我们故意将 LinkLibraryDependencies 设置为 false,以便 add_dependencies 不会导致链接。”
  • 确定LinkLibraryDependencies 会导致所有符号链接吗?我 99% 确定情况并非如此。
  • 在这里查看我的 SO 答案之一:stackoverflow.com/a/23799529/1151329

标签: visual-studio visual-studio-2015 cmake


【解决方案1】:

似乎不再需要“链接库依赖项”和“使用库依赖项输入”标志来链接所有 lib 符号。

在 Visual Studio 2015 中,您不能在目标上使用 /WHOLEARCHIVE 链接器标志。我编辑了对相关问题的回答,以提供更多详细信息:

https://stackoverflow.com/a/23799529/1151329

该标志的作用类似于 GCC -whole-archive 链接器标志。

在我的 CMAKE 文件中我添加了这个:

SET_TARGET_PROPERTIES(${targetname} PROPERTIES LINK_FLAGS_DEBUG "/WHOLEARCHIVE:debug_lib_name")
SET_TARGET_PROPERTIES(${targetname} PROPERTIES LINK_FLAGS_RELEASE "/WHOLEARCHIVE:release_lib_name")

【讨论】:

    猜你喜欢
    • 2019-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-15
    • 1970-01-01
    • 2013-12-15
    • 2013-01-07
    • 1970-01-01
    相关资源
    最近更新 更多