Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cmake 如何将基于find_包的库重写为可以直接嵌入父项目的库?_Cmake_Webrtc - Fatal编程技术网

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。我想要适当的依赖管理。