如何正确使用 CMake 创建依赖自定义库的复杂项目

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

我正在尝试创建一个复杂的项目,该项目成为使用以下库的单个可执行文件:使用一个接口库的两个库 BHV 和 HAL。 我有这个项目结构:

.
├── BHV
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── CMakeLists.txt
│   ├── include
│   ├── libBHV_Library.so
│   ├── Makefile
│   └── sources
├── HAL
│   ├── check_libraries.cmake
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── CMakeLists.txt
│   ├── include
│   ├── libHAL_Library.so
│   ├── Makefile
│   └── sources
├── Interface
│   ├── CMakeCache.txt
│   ├── CMakeFiles
│   ├── cmake_install.cmake
│   ├── CMakeLists.txt
│   ├── include
│   ├── libInterface_Library.a
│   ├── Makefile
│   └── sources
├── CMakeCache.txt
├── CMakeFiles
├── cmake_install.cmake
├── CMakeLists.txt
├── main.cpp
├── Makefile
├── README.md

不幸的是,我无法将各个库相互连接。

在 Interface_lib CMakeList.txt 我有这个:

cmake_minimum_required(VERSION 3.10)
project(Interface_Library)

#requires at least C++17
set(CMAKE_CXX_STANDARD 17)


# Add all .cpp files from sources folder
file(GLOB SOURCES "sources/*.cpp")

# Add all .h files from include folder
file(GLOB HEADERS "include/*.h")

# Add main.cpp to the project
add_library(Interface_Library STATIC ${SOURCES} ${HEADERS})

在 HAL_lib CMakeList.txt 我有这个:

cmake_minimum_required(VERSION 3.10)
project(HAL_Library)

# requires at least C++17
set(CMAKE_CXX_STANDARD 17)

################################### DIR_MANAGMENT #########################################

# Get the parent directory
get_filename_component(PARENT_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)

#Set the directory of the parent file as the current directory
set(CMAKE_CURRENT_LIST_DIR ${PARENT_DIR})

message("MYPROJECT_DIR directory: ${CMAKE_CURRENT_LIST_DIR}")

################################### HAL_LIB #########################################

# Add all .cpp files from sources folder
file(GLOB SOURCES "sources/*.cpp")

# Add all .h files from include folder
file(GLOB HEADERS "include/*.h")

# Add main.cpp to the project
add_library(HAL_Library SHARED ${SOURCES} ${HEADERS})

################################### INTERFACE_LIB #########################################

target_link_directories(${PROJECT_NAME} PUBLIC ${CMAKE_CURRENT_LIST_DIR}/Interface)

# Link the Interface_Library into the HAL_Library
target_link_libraries(HAL_Library Interface_Library)

# check if libraries were included
set(TARGET_NAME HAL_Library)
include(check_libraries.cmake)

作为输出,我一直找不到图书馆。我究竟做错了什么? 我的项目结构方法正确吗?

谢谢。

cmake linker shared-libraries project static-libraries
© www.soinside.com 2019 - 2024. All rights reserved.