我想从我的一个项目中创建一个静态库,以便我可以在其他项目中像这样使用它:
#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/