Cmake 如何将基于find_包的库重写为可以直接嵌入父项目的库?
创建的库Cmake 如何将基于find_包的库重写为可以直接嵌入父项目的库?,cmake,webrtc,Cmake,Webrtc,创建的库libwebrtcfrom可与make一起使用;进行安装,希望使用该库的项目以后必须使用CMake提供的find_软件包 一、 但是,希望更改libwebrtc,以便将其作为一个git子模块添加到我当前的项目中,作为一个自定义库,例如,当我键入:cmake。。;生成一个静态/动态库,然后链接到我的主应用程序中。(我前面引用的Qt库示例令人困惑,因为它是在我的主项目之外构建的,并且只在之后链接到它——这不是我想要的)。很抱歉让你感到困惑 要做到这一点,我认为必须将at的ExternalPr
libwebrtc
from可与make一起使用;进行安装
,希望使用该库的项目以后必须使用CMake提供的find_软件包
一、 但是,希望更改libwebrtc
,以便将其作为一个git子模块添加到我当前的项目中,作为一个自定义库,例如,当我键入:cmake。。;生成一个静态/动态库,然后链接到我的主应用程序中。(我前面引用的Qt库示例令人困惑,因为它是在我的主项目之外构建的,并且只在之后链接到它——这不是我想要的)。很抱歉让你感到困惑
要做到这一点,我认为必须将at的ExternalProject\u Add
at更改为Add\u library
调用
这里的问题是,include\u目录
是在库完全构建之前由主项目使用的
问题:
如何重写libwebrtc
,将其用作具有适当构建依赖项的简单静态库,以便只有在libwebrtc
构建完成并且在libwebrtc
的CMAKE\u CURRENT\u BINARY\u DIR
中生成自定义头文件后,我的主项目才会被编译/链接
或者换句话说,如何重写libwebrtc
以供使用,而不必为库调用make install
,然后使用find_package
来使用该库
黑客(已经在工作了)
通过这项技术,我已经能够:
- 从父项目生成库
- 依赖于生成的头文件,这些头文件仅在
完全构建之后才存在(因此,延迟主项目构建,直到满足依赖关系)libwebrtc
- 取决于生成的webrtc。链接器步骤的静态库
makeinstall
将起作用,因为libwebrtc
是静态链接的
add_dependencies(${PROJECT_NAME} libwebrtcx)
add_subdirectory(third-party/libwebrtcx)
include_directories(
${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/include/webrtc
${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/include/webrtc/third_party/libyuv/include/
${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/webrtc/src/third_party/abseil-cpp
)
add_library(libwebrtc STATIC IMPORTED)
set_property(TARGET libwebrtc PROPERTY IMPORTED_LOCATION "${CMAKE_BINARY_DIR}/sources/third-party/libwebrtcx/webrtc/src/out/Release/obj/libwebrtc.a")
target_link_libraries(${PROJECT_NAME} libwebrtc)
注意:需要将libwebrtc项目重命名为libwebrtcx,并且ExternalProject\u Add
at必须重命名为libwebrtcx
注意:它还需要将所有
CMAKE_BINARY_DIR
重命名为CMAKE_CURRENT_BINARY_DIR
,并将CMAKE_SOURCE_DIR
重命名为CMAKE_CURRENT_SOURCE_DIR
。详细信息可以在这里找到:如果我答对了您的问题,您希望能够在不下载任何内容的情况下执行ExternalProject\u Add
(因为此外部项目作为子模块存在于源代码树中)。通常,只需运行add_subdirectory
(可能使用EXCLUDE_FROM_ALL
选项)即可实现这一点。我的目标是将libwebrtc作为子项目集成到我的应用程序中,以便每次我重建应用程序时,它也会重建libwebrtc。我需要适当的依赖关系管理。如果我答对了您的问题,您希望能够在不下载任何内容的情况下执行ExternalProject\u Add
(因为此外部项目作为子模块存在于源代码树中)。通常,只需运行add_subdirectory
(可能使用EXCLUDE_FROM_ALL
选项)即可实现这一点。我的目标是将libwebrtc作为子项目集成到我的应用程序中,以便每次我重建应用程序时,它也会重建libwebrtc。我想要适当的依赖管理。