更改包括静态库的路径

时间:2015-03-10 11:16:02

标签: 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

2 个答案:

答案 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>