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