我怎样才能链接到一个CMake目标比指定其输出文件的绝对路径更简洁呢?

qgelzfjb  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(98)

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

  • CMakeLists.txt
  • 图书馆项目
    • 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)
aydmsdu9

aydmsdu91#

添加依赖项。

target_link_libraries(UiProject LibraryProject)

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

odopli94

odopli942#

使用target_link_libraries链接到项目有多种方法,最简单的一种(也是您可能想要的一种)是通过CMake目标的名称进行链接。
假设在LibraryProject子目录中定义的目标也称为LibraryProject,则应使用target_link_libraries(UiProject LibraryProject)
如果UiProject是一个库,你还应该指定链接的可见性(如果想要使用UiProject接口的东西肯定会想要使用LibraryProject接口,则为PUBLIC)。
您可以选择的所有方式:

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

参见the docs了解完整信息。

相关问题