Я пытаюсь связать статическую библиотеку, созданную мной с использованием CMake, и иметь структуру подкаталогов к ней.Выглядит это так (->
представляет каталог):
Root
| - CMakeLists.txt
| -> First
| | - CMakeLists.txt
| | -> Object
| | | - object.cpp object.hpp
| |
| -> Second
| | - CMakeLists.txt
| | - secondObject.hpp secondObject.cpp
| |
| -> Third
| | - CMakeLists.txt
| | - thirdObject.hpp thirdObject.cpp
| |
| -> Main
| - CMakeLists.txt
| - main.cpp
В файле cmake Root:
cmake_minimum_required(VERSION 3.0)
project(Main)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
include_directories(First)
include_directories(Second)
include_directories(Third)
add_subdirectory(First)
add_subdirectory(Second)
add_subdirectory(Third)
add_subdirectory(Main)
В файле cmake First:
project(First)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
add_library(First STATIC Object/object.cpp Object/object.hpp)
add_dependencies(First Second Third)
target_link_libraries( First Second Third)
Второе и третье схожи, но второе зависит только от третьего, а третье вообще ни от чего не зависит.Проблема возникает, когда я пытаюсь связать его с файлом cmake моего Main:
project(Main)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(Main First Second Third)
add_executable(Main main.cpp)
target_link_libraries(Main First Second Third)
Когда я запускаю cmake ..
из папки сборки, он пройдет через все довольные и не будет жаловаться.Однако, когда я нажимаю make или Generate for Windows в графическом интерфейсе, я получаю жалобу, что object.hpp: No such file or directory
.Я включаю это в main.cpp
.Я, очевидно, могу изменить это на #include <Object/object.hpp>
, но я чувствую, что это побеждает цель ссылки в библиотеку.(Может быть, это неправильное мышление).
Я также сталкивался с подобными проблемами, когда в других структурах, подобных этой, в файле типа object.cpp
мне нужно было бы сделать #include "Object/object.hpp"
, даже если object.hpp
находится в том же каталоге, что и object.cpp
,
Как правильно связать проект Main с проектом First, чтобы мне не нужно было #include <Object/object.hpp>
?Или это единственный способ сделать это?Или я иду по этому неправильному пути?