首页 > 解决方案 > 安装在包含目录中定义的目标

问题描述

给定目录结构:

foo
| CMakeLists.txt
+--bar
   | CMakeLists.txt
   | hello_world.cpp

如果我们的顶层CMakeLists.txt看起来像这样:

cmake_minimum_required(VERSION 3.5)
add_subdirectory(bar)

子目录是这样的:

cmake_minimum_required(VERSION 3.5)
add_library(BarLibrary STATIC hello_world.cpp)
install(TARGETS BarLibrary ARCHIVE DESTINATION .)

这按预期工作。但是,在我们的实际示例中,bar子目录是由对安装一无所知的第三方提供的,因此只有前两行:

cmake_minimum_required(VERSION 3.5)
add_library(BarLibrary STATIC hello_world.cpp)

所以,我们希望我们的顶层CMakeLists.txt是这样的:

cmake_minimum_required(VERSION 3.5)
add_subdirectory(bar)
# Somehow import bar/BarLibrary
install(TARGETS BarLibrary ARCHIVE DESTINATION .)

但是,上面的代码会产生错误:

CMake Error at CMakeLists.txt:4 (install):
  install TARGETS given target "BarLibrary" which does not exist in this
  directory.

我们知道目标总是称为BarLibrary ,我们可以通过一堆if()s 来处理 STATIC 与 DYNAMIC、Windows 与 Linux 等问题并使用install(FILES目录?请注意,我们仅限于 CMake 3.51 或更早版本。

标签: cmake

解决方案


推荐阅读