首页 > 解决方案 > Cmake 在另一个自定义库中包含一个自定义库

问题描述

我正在尝试使用 cmake 将一个自定义库 (LibraryTwo) 包含到另一个自定义库 (LibraryOne) 中,但出现找不到包含库的错误。将鼠标悬停在 include 语句上时的原始错误:

Basierend auf den von der configurationProvider-Einstellung bereitgestellten Informationen wurden #include-Fehler festgestellt。Wellenlinien sind für dieese Übersetzungseinheit deaktiviert (C:\Users\...\myLibraries\LibraryOne\src\thisFile.cpp).C/C++(1696) Die Datei "Quelle" kann nicht geöffnet werden: "myLibraries/LibraryTwo/myFile2. h".C/C++(1696)

翻译

根据 configurationProvider 设置提供的信息,检测到 #include 错误。此翻译单元禁用波形线 (C:\Users\...\myLibraries\LibraryOne\src\thisFile.cpp).C/C++(1696) 无法打开源文件:“myLibraries/LibraryTwo/myFile2.h” .C/C++(1696)

我在 LibraryOne-> src 的 cpp 文件中使用以下包含语句

#include "LibraryTwo/myFile2.h"

Visual Studio 代码中的项目结构是这样的:

MyProject

.vscode
MyProject-> mainFile.cpp
MyProject-> src (with cpp file and main method)
MyProject-> include (with corresponding .h files)

MyProject-> MyLiraries
MyProject-> MyLiraries-> CmakeLists.txt

MyProject-> MyLiraries-> LibraryOne
MyProject-> MyLiraries-> LibraryOne-> src (with cpp files)
MyProject-> MyLiraries-> LibraryOne-> include (with corresponding .h files)
MyProject-> MyLiraries-> LibraryOne-> CmakeLists.txt

MyProject-> MyLiraries-> LibraryTwo
MyProject-> MyLiraries-> LibraryTwo-> src (with cpp files)
MyProject-> MyLiraries-> LibraryTwo-> include (with corresponding .h files)
MyProject-> MyLiraries-> LibraryOne-> CmakeLists.txt

我将以下代码用于文件夹LibraryTwoLibraryOne中的 CmakeLists.txt 文件

project(MyProject)

set(CMAKE_CXX_STANDARD 17)
add_compile_options("-Wall" "-Wextra")

find_package(myLibraries)
include_directories(${CMAKE_CURRENT_LIST_DIR})

add_library(LibraryOne"")
add_library(myLibs::LibraryOne ALIAS LibraryOne)
[...]
include(GNUInstallDirs)
install( 
  TARGET LibraryOne
  EXPORT myLibrariesTargets
  ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
  )

带有库安装的文件夹 MyProject -> My Libraries 中的 cmake 如下

project(MyProject)

set(CMAKE_CXX_STANDARD 17)
add_compile_options("-Wall" "-Wextra")
include_directories(${CMAKE_CURRENT_LIST_DIR})

install(
  EXPORT myLibrariesTargets
  DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/myLibraries
  NAMESPACE myLibraries::
  FILE myLibrariesTargets.cmake 
  )

include(CMakePackageConfigHelpers)
configure_package_config_file( 
  "Config.cmake.in" 
  "myLibrariesConfig.cmake"
  INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/myLibraries
  PATH_VARS
    CMAKE_INSTALL_LIBDIR
  )

write_basic_package_version_file(
  ${CMAKE_CURRENT_BINARY_DIR}/myLibrariesConfigVersion.cmake
  VERSION 1.0.0
  COMPATIBILITY SameMajorVersion
  )

### Install Config and ConfigVersion files
install(
  FILES "${CMAKE_CURRENT_BINARY_DIR}/myLibrariesConfig.cmake"
        "${CMAKE_CURRENT_BINARY_DIR}/myLibrariesConfigVersion.cmake"
  DESTINATION "${CMAKE_INSTALL_LIBDIR}/cmake/myLibraries"
  )

MyProject 中最高级的 Cmake

cmake_minimum_required(VERSION 2.9)
project(myProject)

set(CMAKE_CXX_STANDARD 17)
add_compile_options("-Wall" "-Wextra")
include_directories(${CMAKE_CURRENT_LIST_DIR})


include_directories(src include)

find_package(myLibraries)

add_executable(myMain mainFile.cpp)

MyProject 文件夹中的 Config.cmake.in

@PACKAGE_INIT@
include( "${CMAKE_CURRENT_LIST_DIR}/MyLibsTargets.cmake" )

如何正确定义我的库并将它们相互包含或包含在 MyProject-> src 中的主文件中?

PS:我对 cpp 和 cmake 相当陌生,可能缺少一些标准程序来执行此操作。因此,我很乐意得到一些帮助,因为我的谷歌研究(来自 cmake 布局起源)根本没有帮助。PS2:由于英语不是我的第一语言,因此某些术语可能完全错误。我提前道歉。

标签: c++cmake

解决方案


推荐阅读