【发布时间】:2020-04-15 14:02:58
【问题描述】:
我决定为我的新项目尝试 CMake。我花了几个小时阅读官方文档和教程,因此我获得了一些基本知识,但无法为我的项目编写正确的 CMakeLists。
文件层次结构如下所示:
project
|-- library
| |-- CMakeLists.txt
| |-- lib.cpp
| `-- lib.h
|-- app1
| |-- CMakeLists.txt
| |-- app1.cpp
| |-- app1.h
| `-- main.cpp
|-- app2
| |-- CMakeLists.txt
| |-- app2.cpp
| |-- app2.h
| `-- main.cpp
`-- app3
|-- CMakeLists.txt
|-- app3.cpp
|-- app3.h
`-- main.cpp
关键是我想将库编译为静态库,以便 app1、app2、app3 等可以使用它。这种结构的原因是每个 appN 都有自己的 main 函数,将在 AWS Lambda 上运行,但我想在库中编写一些它们之间共享的通用代码。
从我目前阅读的内容来看,如果它位于 appN 的子目录中,使用add_directory() 添加库并将其添加到target_link_libraries() 很容易,但我不知道如何添加appN 文件夹之外的库。我尝试使用 ${CMAKE_CURRENT_SOURCE_DIR}/../library/lib.a 等相对路径,但随后 CMake 给出库位于项目文件夹之外的错误。
我确信有一些方法可以做到这一点。我已经阅读了一些关于 CMake 模块和 find_package() 的内容,但我认为对于这个用例来说似乎有点矫枉过正/复杂了?
【问题讨论】:
-
"...,但是 CMake 给出了库在项目文件夹之外的错误。" - 你检查过that question 有类似的错误信息,不是吗?
-
或者您可以为所有使用您的库的项目使用主 cmakelists