更改静态库的包含路径

Change include path of static library

我想从我的一个项目中创建一个静态库,以便我可以在其他项目中像这样使用它:

#include <MonoEngine/engine.hpp>

但是现在我有一个 src 文件夹:

#include <MonoEngine/src/engine.hpp>

如何使用 CMake 构建静态库,以便可以省略 src/

这就是我的图书馆文件夹的大致结构。

monoEngine
|-src
| |-engine.hpp
| |-engine.cpp
| |-subfolder1
|   |-file.hpp
|   |-file.cpp
|-CMakeLists.txt

cmake 有一个 include_directories 命令,它允许您将目录添加到列表中,编译器将在 documentation

中查找包含文件的更多详细信息

一旦您修改了构建系统,您应该能够在源代码中编写 #include <engine.hpp>

创建子文件夹 include 并将所有 headers 放在那里并将该文件夹添加到您的包含路径:

monoEngine
|-include
| |-MonoEngine
| | |-engine.hpp 
| | |-subfolder1
| |   |-public.hpp
|-src
| |-engine.cpp
| |-subfolder1
|   |-private.hpp (will not be shared with third parties)
|   |-file.cpp
|-CMakeLists.txt

这样 include 中的 headers 将提供你的库的 public 接口,而 src 目录中的 headers 将不会暴露给使用您的库的第三方。这是构建库的常用方法。

附录:

既然你在下面的评论中询问了如何将其与 CMake 一起使用,一个简单的 CMakeLists.txt 可能看起来像这样(未经测试):

project( your_project )
cmake_minimum_required( VERSION 3.0 )

set( SRC_LIST 
    include/MonoEngine/engine.hpp
    include/MonoEngine/subfolder1/public.hpp
    src/engine.cpp
    src/subfolder1/file.cpp
    src/subfolder1/private.h )

add_library( your_lib ${SRC_LIST} )
target_include_directories( your_lib PUBLIC ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/src )

# and then optional parameters:
# target_compile_options( your_lib ... )
# target_link_libraries( your_lib ... )
# install(TARGETS your_lib ... )