c++ - 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
我将以下代码用于文件夹LibraryTwo和LibraryOne中的 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:由于英语不是我的第一语言,因此某些术语可能完全错误。我提前道歉。
解决方案
推荐阅读
- apache - 没有 Location 标头的 301 http 响应
- unity3d - 可能的统一内存泄漏
- python - Python - 将 Webscrape 打印到 excel 上
- sql - 如何存储 EXEC sys.sp_executesql 的结果
- c++ - 将数组的新实例添加到向量
- firebase-realtime-database - 正确设置 firebase 数据库规则
- go - kafka-go 库 - 从最新民意调查中获取所有记录作为消息片段
- python - 如何将 python Socket.IO 与 Qt 集成
- java - 确定 Kotlin 接口方法是否使用 Java 反射实现
- java - 在将我的登录页面连接到 MySql 时,我收到 CommunicationException 错误