CMAKE:如何告诉库在哪里可以找到依赖项
cmake: how to tell library where to find dependencies
我想以静态方式构建一个库,并将其(连同其所有依赖项(集成到我的项目中。目标平台(从长远来看(是Android。目前,我只想在Windows主机上测试我的linux(debian 64位(vm的整个过程。生成的项目结构应如下所示
project/
|
|----- thirdparty/
| |
| |----- lib1/ (depends on 2 and 3)
| |----- lib2/
| ----- lib3/
----- application/
lib1 是我在应用程序中使用的库。所有库都已经为我当前的目标系统构建。我使用了库附带的configure
脚本。因为 lib1 需要 lib2 和 lib3,所以我使用 with-lib2-prefix=<pathof-lib2>
引用了它们。我用来用QtCreator构建应用程序的cmake脚本链接lib1,如下所示:
ADD_LIBRARY(lib1 STATIC IMPORTED)
SET(lib1_path ${CMAKE_SOURCE_DIR}/thirdparty/lib1/lib1.a)
# and give path to external library with IMPORTED_LOCATION
SET_TARGET_PROPERTIES(gpgme PROPERTIES IMPORTED_LOCATION ${lib1_path})
//later...
target_link_libraries( ${COMPONENT_NAME}
lib1
)
Lib1 按预期找到,但您可能已经怀疑找不到依赖项。事实上,我从来没有告诉cmake如何做。但是,因为我对cmake很陌生,我不知道这是如何完成的。
要么我想告诉 lib1 在哪里可以找到带有 cmake 的 lib2 和 lib3。或者,如果不接触lib1的"构建过程"就无法做到这一点,也许我可以以某种方式设法以正确的方式从cmake调用./configure
。有没有人遇到类似的问题,可以给我一个建议如何做到这一点?
我解决了这个问题。我必须将每个依赖项库添加到我的 cmake 文件中:
ADD_LIBRARY(lib3 STATIC IMPORTED)
SET(lib3_path ${CMAKE_SOURCE_DIR}/thirdparty/lib3/lib/lib3.a)
SET_TARGET_PROPERTIES(lib3 PROPERTIES IMPORTED_LOCATION ${lib3_path})
ADD_LIBRARY(lib2 STATIC IMPORTED)
SET(lib2_path ${CMAKE_SOURCE_DIR}/thirdparty/lib2/lib/lib2.a)
SET_TARGET_PROPERTIES(lib1 PROPERTIES IMPORTED_LOCATION ${lib2_path})
ADD_LIBRARY(lib1 STATIC IMPORTED)
SET(lib1_path ${CMAKE_SOURCE_DIR}/thirdparty/lib1/lib/lib1.a)
SET_TARGET_PROPERTIES(lib2 PROPERTIES IMPORTED_LOCATION ${lib1_path})
然后按正确的顺序链接它们:
target_link_libraries( ${COMPONENT_NAME}
lib1
lib2
lib3
)
如果在链接 lib1 之前链接 link2 和 lib3,链接器将"优化 lib2 和 3
相关文章:
- C++我需要了解在哪里使用指针和双指针
- 未定义的引用在哪里
- 谷歌测试中的期望值存储在哪里
- 尽管遵循了规则,内存泄漏在哪里
- 静态数据成员模板专用化的实例化点在哪里
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在哪里声明结构运算符重载
- C++ 中的自定义异常:在哪里定义它们?
- 常量参数存储在哪里 (C++)?
- 如何在 c++ 中确定一条指令(以字节为单位)在哪里结束,另一条指令从哪里开始?
- 此递归函数的每次迭代的值存储在哪里?
- 如何告诉本机节点模块所需的dll存储在哪里?
- 在哪里存储跨平台C++应用存储?
- C++泛型类错误,问题出在哪里?
- 在标准中,模板参数的语法在哪里定义,例如,'std::function<int(char)>'?
- 将类作为主要参数的语法在哪里需要?
- 模板参数在 C++ 中存储在哪里?
- CMAKE:如何告诉库在哪里可以找到依赖项
- 多个嵌套的依赖名称 - 将 typename 关键字粘贴在哪里
- 这里的循环依赖关系在哪里