gpt4 book ai didi

c++ - 为不同的库包含相同的头文件

转载 作者:行者123 更新时间:2023-12-03 02:07:42 27 4
gpt4 key购买 nike

我有一个具有以下结构的 C++ 项目:

CMakeLists.txt
code/
libClient/
CMakeLists.txt
include/
LibClient/
lib_client.h
src/
lib_client.cpp
libServer/
CMakeLists.txt
include/
LibServer/
lib_server.h
src/
lib_server.cpp
libSDK/
include/
CMakeLists.txt
LibSDK/
lib.h

我的根 CMakeLists.txt 具有以下内容:

cmake_minimum_required(VERSION 3.0)

project(libExample)


set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)

add_subdirectory(code/libClient)
add_subdirectory(code/libServer)
add_subdirectory(code/libSDK)

现在,我想为服务器和客户端构建库 .a文件。 lib_client.cpp包含头文件

#include <LibClient/lib_client.h>

到这里,我已经很清楚了,但是头文件lib_client.h包括lib.h位于/code/libSDK/include/LibSDK/lib.h

#ifndef LIBCLIENT_H
#define LIBCLIENT_H

#include <string>
#include <LibSDK/lib.h>

为了实现此目的,我在 ClientLib 的 CMakelists.txt 中编写了以下内容:

project(LIBCLIENT)

add_library(
Client_lib STATIC
src/lib_client.cpp
include/LibClient/lib_client.h
)

target_include_directories(egoClient_lib PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
target_include_directories(egoClient_lib PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/../libSDK/include") ###this line I think should be different.

我现在的问题是,是否可以通过硬编码路径避免这一行?这个lib.h也在该项目的其他头文件中使用(包含)。

此 lib.h 的 CMakelists.txt 到目前为止仅包含以下内容:

cmake_minimum_required(VERSION 3.0)

project(LIBSDK)

我考虑过使用 CMake find_package()方法并写一个Find<package>.cmake文件,但我没有看到这样做的任何优点,因为在这个文件中我还必须编写路径?

提前非常感谢您。

最佳答案

如果 Client_lib 使用 SDK_lib,您需要在 Client_lib 的 CMakeLists.txt 中使用以下内容:

target_link_libraries(Client_lib SDK_lib)

这将告诉 CMake Client_lib 使用 SDK_lib。它还会自动使 PUBLICINTERFACE 包含在 SDK_lib 上配置的路径(在 SDK_lib 的 CMakeLists.txt 中使用 target_include_directories) )可用于 Client_lib。

关于c++ - 为不同的库包含相同的头文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58471946/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com