设置库之间的依赖关系(CMake)

时间:2011-11-01 17:07:19

标签: c++ visual-studio cmake

我正在使用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调试_ $ {VS} _ $ {PLATFORM} d优化   a $ {VS_DIR} $ {PLATFORM}调试b $ {VS} _ $ {PLATFORM} d优化   B'/ EM> $ {VS_DIR} _ $ {PLATFORM})

在Visual Studio中,不会显示各个项目之间的不同“项目依赖关系”。我想知道是否有我想念的东西,或者它是否与我们的库修复后不兼容。

1 个答案:

答案 0 :(得分:1)

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

尝试:

TARGET_LINK_LIBRARIES(c a b)

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

就是这样!