我有一个这样结构的项目:
- 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)
2条答案
按热度按时间aydmsdu91#
添加依赖项。
参见CMake Modern介绍中的示例库:https://gitlab.com/CLIUtils/modern-cmake/-/blob/master/examples/extended-project/apps/CMakeLists.txt#L4。
odopli942#
使用
target_link_libraries
链接到项目有多种方法,最简单的一种(也是您可能想要的一种)是通过CMake目标的名称进行链接。假设在
LibraryProject
子目录中定义的目标也称为LibraryProject
,则应使用target_link_libraries(UiProject LibraryProject)
。如果UiProject是一个库,你还应该指定链接的可见性(如果想要使用
UiProject
接口的东西肯定会想要使用LibraryProject
接口,则为PUBLIC
)。您可以选择的所有方式:
参见the docs了解完整信息。