我如何链接到一个CMake目标比指定其输出文件的绝对路径更简洁?



我有一个这样结构的项目:

  • CMakeLists.txt
  • LibraryProject
    • CMakeLists.txt
    • src
  • UiProject
    • CMakeLists.txt
    • src

我的顶级CMakelists.txt看起来像这样:

project(Project)
add_subdirectory(LibraryProject)
add_subdirectory(UiProject)

我的问题是,'UiProject'依赖于'LibrayProject的'库,在它的CMakeLists.txt我添加了

target_link_libraries(UiProject <absolute path to library>)

它工作得很好,但我想让它的工作没有提供一个绝对的路径那里(特别是因为输出文件夹和库扩展取决于平台),有一种方法来做它使用CMake?像这样:

... in top level CMakeLists.txt
project(Project)
output_path = add_subdirectory(LibraryProject)
add_subdirectory(UiProject, output_path)
... in UiProject's CMakeLists.txt
target_link_libraries(UiProject output_path)

直接添加依赖项。

target_link_libraries(UiProject LibraryProject)

参见CMake Modern介绍中的示例库:https://gitlab.com/CLIUtils/modern-cmake/-/blob/master/examples/extended-project/apps/CMakeLists.txt#L4 .

使用target_link_libraries链接到项目有多种方式。最简单的一种——也是您可能想要的一种——是通过CMake目标的名称进行链接。

假设在LibraryProject子目录中定义的目标也称为LibraryProject,那么您将使用target_link_libraries(UiProject LibraryProject)

如果UiProject是一个库,你也应该指定链接的可见性(PUBLIC如果想要使用UiProject的接口的东西肯定会想要使用LibraryProject的接口)。

您可以选择的所有方式:

  • 库目标名
  • 库文件的完整路径
  • 一个普通的库名
  • 链接标志
  • 计算结果为上述之一的生成器表达式

详细信息请参见文档

相关内容

  • 没有找到相关文章

最新更新