全球CMakeLists.txt
这个CMakeLists.txt编译了一些C++文件(Qt5 5/.)与MOC在任何方面都不是“特别”。
有关守则如下:
add_subdirectory(third-party/libwebrtc)
include_directories(third-party/libwebrtc)
target_link_libraries(${PROJECT_NAME} libwebrtc)libwebrtc CMakeLists.txt
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(),而不是像我预期的那样在它的子目录中搜索。
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库))希望包含只有在完成构建后才可用的文件:
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(),但如果没有黑客攻击,它能完成吗?
发布于 2020-04-03 08:26:17
错误的CMAKE_SOURCE_DIR
在我看来,错误似乎就在这里。
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_SOURCE_DIR}/CMakeModules)CMAKE_SOURCE_DIR将是通往您的主源-Dir的路径。把这个变成
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH}
${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules)用作外部依赖项
另一个想法是自己构建项目,并将其作为外部依赖在项目中使用。
find_package(LibWebRTC REQUIRED)
include(${LIBWEBRTC_USE_FILE})
target_link_libraries(my-app ${LIBWEBRTC_LIBRARIES})发布于 2020-04-08 06:40:23
所以我所做的基本上是:
libwebrtc项目结构
将文件夹重命名为libwebrtcx
project(libwebrtcx)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} - ${CMAKE_SOURCE_DIR}/CMakeModules) +/CMakeModules
libwebrtc CMakeLists.txt
取代了所有这些:
我的项目的CMakeLists.txt
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的依赖项。
我想知道这是否也能以更好的方式完成?!
https://stackoverflow.com/questions/61007492
复制相似问题