CMake导入本地共享库以及如何将其包含在标题中

问题描述 投票:0回答:1

我无法使用CMake在另一个项目中导入共享库。

my-utils-lib

我的lib文件是在my-utils-lib项目中生成的:

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(my-utils-lib VERSION 1.0.0 DESCRIPTION "Utils for C++.")
set(CMAKE_CXX_STANDARD 14)

add_library(
    my-utils-lib SHARED
        ./src/string_utils/find_matches.cpp
        ./src/string_utils/split.cpp
        ./src/string_utils/format.cpp
        ./src/vector_utils/print_vector.cpp
)

set_target_properties(
    my-utils-lib PROPERTIES
        VERSION ${PROJECT_VERSION}
        SOVERSION 1
)

target_include_directories(my-utils-lib PRIVATE src)

include(GNUInstallDirs)

install(
    TARGETS my-utils-lib
        DESTINATION ${CMAKE_INSTALL_LIBDIR}
        EXPORT my-utils-lib
)

configure_file(my-utils-lib.pc.in my-utils-lib.pc @ONLY)

install(
    FILES ${CMAKE_BINARY_DIR}/my-utils-lib.pc 
    DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig
)

我运行mkdir build && cd ./build/ && cmake .. && sudo make install以生成并安装我的库文件。

最后,my-utils-lib项目树看起来像这样:

CMakeLists.txt
my-utils-lib.pc.in
src/
  |_main.cpp
  |_main.h
  |_string_utils/
    |_find_matches.cpp
    |_find_matches.h
    |_format.cpp
    |_format.h
    |_split.cpp
    |_split.h
  |_vector_utils/
    |_print_vector.cpp
    |_print_vector.h

我的项目

[在另一个项目中,我想在本地标题之一中导入“ split.h”,而不必输入实际文件的完整路径。类似于:

#include "my-utils-lib/string_utils/split.h"

到目前为止,我尝试了许多解决方案,但没有一个起作用。我最后的尝试是:

CMakeLists.txt

cmake_minimum_required(VERSION 3.16)
project(longer_sub_sequence)

set(CMAKE_CXX_STANDARD 14)

find_package(Qt5Widgets REQUIRED)
find_library(my-utils-lib libmy-utils-lib.1.0.0.dylib)
add_library(my-utils-lib SHARED IMPORTED)

add_executable(
    longer_sub_sequence
        main.cpp
        visualization/draw_matrix.cpp
        visualization/draw_matrix.h
)

target_link_libraries(longer_sub_sequence my-utils-lib Qt5::Widgets)

CMake自动构建运行良好(我使用CLion作为IDE),但找不到如何从库中导入任何代码。

我检查了/ usr / local / lib(CMake在其中生成了我的lib文件,并找到了正确的lib文件:

find . -maxdepth 1 -name "*my-utils-lib*" -print

./libmy-utils-lib.1.0.0.dylib
./libmy-utils-lib.1.dylib
./libmy-utils-lib.dylib

我在这里想念什么?

c++ import cmake shared-libraries
1个回答
0
投票

您缺少安装库标题的信息。您应该为标头添加install命令,就像对库二进制文件所做的一样。

此外,您应该考虑使用比较符号(<>)代替include指令使用双引号:

#include <my-utils-lib/string_utils/split.h>

最后一句话,您正在生成并安装一个仅由pkg-config使用并且没有使用它的.pc文件。

© www.soinside.com 2019 - 2024. All rights reserved.