我想从我的项目中创建一个静态库,以便我可以在其他项目中使用它:
#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
答案 0 :(得分:3)
创建子文件夹include
并将所有标题放在那里,并将该文件夹添加到包含路径中:
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
中的标题将提供库的公共接口,而src
- 目录中的标题将不会使用您的库向第三方公开。这是建立图书馆的常用方法。
<强>附录:强>
由于您在下面的评论中询问如何将其与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 ... )
答案 1 :(得分:0)
cmake有一个include_directories命令,允许您将目录添加到编译器将查找的列表中,以包含documentation
中的更多详细信息您修改构建系统,您应该只能在源代码中编写#include <engine.hpp>
。