2015-03-10 4 views
1

Я хочу создать статическую библиотеку из проекта шахты таким образом, что я могу использовать его, как это в других проектах:Изменения включает путь статической библиотеки

#include <MonoEngine/engine.hpp> 

Однако сейчас у меня есть папка с исходниками между :

#include <MonoEngine/src/engine.hpp> 

Как я могу построить статическую библиотеку с CMake таким образом, что я могу опустить src/?

Это примерно так, как структурирована папка библиотеки.

monoEngine 
|-src 
| |-engine.hpp 
| |-engine.cpp 
| |-subfolder1 
| |-file.hpp 
| |-file.cpp 
|-CMakeLists.txt 

ответ

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 -directory не будет использоваться третьим лицам, использующим вашу библиотеку. Это общий подход, если вы создаете библиотеку.

Добавление:

Поскольку вы спросили в комментариях ниже, как использовать это с 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 ...) 
+0

Работает ли это с подпапками? Я продолжу свой вопрос ... – gartenriese

+1

Да, да. Я обновил свой ответ соответственно. – nils

+0

Можете ли вы объяснить, что мне нужно добавить в мой CMakeLists.txt? До того, как я получил только 'add_definitions (-I $ {PROJECT_SOURCE_DIR}/src)' – gartenriese

0

CMake имеет команду include_directories, которая позволяет добавлять каталоги в список компилятор будет искать в включаемых файлов более подробную информацию в documentation

, который вы изменить систему сборки, вы должны быть в состоянии только напишите #include <engine.hpp> в вашем исходном коде.

+0

Это не то, что я хочу Однако. Я все еще хочу, чтобы пользователь поместил имя моей библиотеки в начало include. – gartenriese

 Смежные вопросы

  • Нет связанных вопросов^_^