【问题标题】:Setting dependencies between libraries (CMake)设置库之间的依赖关系 (CMake)
【发布时间】:2011-12-19 16:22:50
【问题描述】:

我正在使用 CMake 构建一个由十几个项目组成的应用程序。我们使用 CMake 为 x86、x64 以及 Visual Studio 2005 和 Visual Studio 2010 自动生成解决方案。

这是我们组织的一个想法:

  • a.lib,没有依赖关系
  • b.lib,没有依赖关系
  • c.lib,依赖a和b
  • d.exe,依赖c

每个项目都位于自己的子目录中,并有自己的CMakeLists.txt 文件。为了跟踪为我们不同平台生成的库/DLL 文件,我们自动使用 _x86/_x64 和 _vc80/_vc100(例如 a_x86_vc100.lib)对每个库/DLL 文件进行后修复,并使用 _d 进行调试(例如,a_x86_vc100_d.lib)。

CMakeLists.txt 文件中,我使用 target_link_libraries 将每个目标链接到相应的库,例如:

TARGET_LINK_LIBRARIES(c debug a_${VS}_${PLATFORM}d 优化 a${VS_DIR}${PLATFORM} 调试 b${VS}_${PLATFORM}d 优化 b${VS_DIR}_${PLATFORM})

在 Visual Studio 中,不会出现各个项目之间的不同“项目依赖关系”。我想知道我是否遗漏了什么,或者它是否与我们的库后修复不兼容。

【问题讨论】:

    标签: c++ visual-studio cmake


    【解决方案1】:

    如果它们都在同一个项目中,我认为它们是,你只需要指定目标名称,调试/发布就会为你处理。我认为您正在链接到实际的库文件而不是目标。

    试试:

    TARGET_LINK_LIBRARIES(c a b)
    
    TARGET_LINK_LIBRARIES(d c)  # It knows that c depends on a and b
    

    就是这样!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-02-22
      • 2017-03-06
      • 2012-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      相关资源
      最近更新 更多