cmake - 安装在包含目录中定义的目标
问题描述
给定目录结构:
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 或更早版本。
解决方案
推荐阅读
- javascript - JavaScript 从数组中获取 3 个唯一的随机对象
- pyinstaller - pyinstaller 创建主文件而不是 main.exe(可执行程序)
- javascript - 在Javascript中更改值后经常检查的计时器
- c - 移植问题 Linux/Unix build 到 Windows — Visual C++ 找不到属性关键字?
- python - select.select io.UnsupportedOperation 的 Python 问题:fileno
- python - 如何将敌人移向玩家?
- intellij-idea - SceneBuilder 未在 Intellij 中加载
- android - 如何获得我用颤振上传到firebase的图片的精确参考
- reactjs - 使用和不使用 docker-compose 运行映像之间的 Dockerized react 应用程序差异
- reactjs - 使用 create-react-app project_name 创建反应应用程序时我们需要互联网连接吗