c++ - 更改静态库的包含路径

标签 c++ cmake static-libraries include-path

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

#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

最佳答案

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

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 中的 header 将提供您的库的公共(public)接口(interface),而 src 目录中的 header 将不会暴露给使用您的库的第三方。这是构建库的常用方法。

附录:

由于您在下面的评论中询问了如何将其与 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 ... )

关于c++ - 更改静态库的包含路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28962280/

相关文章:

cmake - Pytorch Build from Source 给出错误 make : *** No rule to make target 'install' . Stop

linux - 搭建一个linux静态库

C++ 对象数组为每个对象返回相同的 char*

c++ - C++0x中的统一初始化,什么时候用()代替{}?

c++ - 如何将应用程序链接到依赖于另一个库的库?

eclipse - 如何更改 Eclipse 中的 cmake 生成器?

c++ - 如何检查 a^b == c^d 是否。我面临的问题是循环的速度。我已经优化了寻找指数的部分

c++ - 动态规划的POW函数计算

c++ - 如何在 Visual Studio C++ 项目中包含 <sys/select.h> 库?

c++ - 错误 LNK2005 : "void __cdecl operator delete(void *)" (? ?3@YAXPAX@Z) 已在 LIBCMTD.lib(delete_scalar.obj) 中定义