首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CMake:使用add_subproject与库一起使用包含,最终在错误的相对路径中结束

CMake:使用add_subproject与库一起使用包含,最终在错误的相对路径中结束
EN

Stack Overflow用户
提问于 2020-04-03 08:05:06
回答 2查看 456关注 0票数 0

全球CMakeLists.txt

这个CMakeLists.txt编译了一些C++文件(Qt5 5/.)与MOC在任何方面都不是“特别”。

有关守则如下:

代码语言:javascript
复制
add_subdirectory(third-party/libwebrtc)
include_directories(third-party/libwebrtc)
target_link_libraries(${PROJECT_NAME} libwebrtc)

libwebrtc CMakeLists.txt

代码语言:javascript
复制
cmake_minimum_required(VERSION 3.3)
project(libwebrtc)

# Allow the use of IN_LIST operand
cmake_policy(SET CMP0057 NEW)

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
    ${CMAKE_SOURCE_DIR}/CMakeModules)

find_package(Git REQUIRED)

include(FindLibraries)
include(Version)
include(Options)
include(TargetOsAndCpu)
...

全libwebrtc源-> https://github.com/cloudwebrtc/libwebrtc-build/blob/dev/CMakeLists.txt

“cmake.”错误

如果我运行mkdir build; cd build; cmake ..,我可以看到CMake在顶级项目中搜索include(),而不是像我预期的那样在它的子目录中搜索。

代码语言:javascript
复制
joachim@thinkpad-x1:[~/projects/client/build]: cmake ..
-- CMAKE_SYSTEM_INFO_FILE: 
-- CMAKE_SYSTEM_NAME:      
-- CMAKE_SYSTEM_PROCESSOR: 
-- CMAKE_SYSTEM:           
-- CMAKE_C_COMPILER:       /usr/bin/clang
-- CMAKE_CXX_COMPILER:     /usr/bin/clang++
CMake Error at sources/third-party/libwebrtc/CMakeLists.txt:13 (include):
  include could not find load file:

    FindLibraries


CMake Error at sources/third-party/libwebrtc/CMakeLists.txt:14 (include):
  include could not find load file:

    Version

问题(原文)

除了通过复制CMakeModules目录中的包含将库集成到我的基础项目之外,还有什么可以做的吗?

谢谢,下面已经回答了这个问题,现在还留在这里。

关于依赖关系的问题

add_subdirectory调用正确地构建了libwebrtc,但是我的include_directories调用(来自顶级CMakeLists.txt (不是libwebrtc库))希望包含只有在完成构建后才可用的文件:

代码语言:javascript
复制
include_directories(
  ${CMAKE_CURRENT_BINARY_DIR}/sources/third-party/libwebrtc/include/webrtc
  ${CMAKE_CURRENT_BINARY_DIR}/sources/third-party/libwebrtc/include/webrtc/third_party/libyuv/include/
  ${CMAKE_CURRENT_BINARY_DIR}/sources/third-party/libwebrtc/webrtc/src/third_party/abseil-cpp
)

如何使cmake依赖于库的完整构建,然后再构建主程序?通常使用add_custom_command(..),但由于我们使用的是add_subdirectory(..),所以也不能使用add_custom_command(..).

我的问题是将库重命名为libwebrtc/CMakeLists.txt中的项目(Libwebrtcx),以及ExternalProject_Add(libwebrtcx .)并添加一个add_dependencies(${PROJECT_NAME} libwebrtcx(),但如果没有黑客攻击,它能完成吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-04-03 08:26:17

错误的CMAKE_SOURCE_DIR

在我看来,错误似乎就在这里。

代码语言:javascript
复制
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
    ${CMAKE_SOURCE_DIR}/CMakeModules)

CMAKE_SOURCE_DIR将是通往您的主源-Dir的路径。把这个变成

代码语言:javascript
复制
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
    ${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)

用作外部依赖项

另一个想法是自己构建项目,并将其作为外部依赖在项目中使用。

代码语言:javascript
复制
find_package(LibWebRTC REQUIRED)
include(${LIBWEBRTC_USE_FILE})

target_link_libraries(my-app ${LIBWEBRTC_LIBRARIES})
票数 2
EN

Stack Overflow用户

发布于 2020-04-08 06:40:23

所以我所做的基本上是:

libwebrtc项目结构

将文件夹重命名为libwebrtcx

  • renamed项目的

project(libwebrtcx)

  • modified the CMAKE_MODULE_PATH

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - ${CMAKE_SOURCE_DIR}/CMakeModules) +/CMakeModules

libwebrtc CMakeLists.txt

取代了所有这些:

  • CMAKE_SOURCE_DIR与CMAKE_CURRENT_SOURCE_DIR,
  • CMAKE_BINARY_DIR与CMAKE_CURRENT_BINARY_DIR,以及

我的项目的CMakeLists.txt

代码语言:javascript
复制
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)

摘要

有了这个函数,我就可以构建库libwebrtcx,然后才能实际使用它,因为使用了调用。但是对于链接器,我需要原始的'libwebrtc‘名称,因此我基本上引入了另一个名为libwebrtc的依赖项。

我想知道这是否也能以更好的方式完成?!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61007492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档