CMake - компилятор не может найти публичные заголовки от другого (target_link_labraries) - PullRequest
0 голосов
/ 21 сентября 2018

Я пытаюсь написать скрипт сборки с современным CMake (без глобальных переменных и с целями).Пока все прошло нормально, но теперь я хочу связать библиотеку (module2) с библиотекой (module1), которая зависит от первой.Но открытый заголовок module2 не найден компилятором, а каталог include указан в «build / CMakeFiles / Module1.dir / includes_CXX.rsp».Итак, мой вопрос, как мне это работает?

Структура проекта:

|-Module1
|-|-inc (public headers)
|-|-src (private headers and sources)
|-|-CMakeLists.txt (3)
|-Module2
|-|-inc (here is "module2.h" which I want to include in Module1)
|-|-src
|-|-CMakeLists.txt (2)
|CMakeLists.txt (1)

Project-CMakeLists.txt (1): На данный момент исполняемого файла нет

cmake_minimum_required(VERSION 3.8)
project(foo CXX)   
add_subdirectory(Module2)
add_subdirectory(Module1)

Module2-CMakeLists.txt (2):

add_library(Module2 OBJECT 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/module2_1.cpp 
)
target_include_directories(Module2 
    PUBLIC 
        ${CMAKE_CURRENT_SOURCE_DIR}/inc
    PRIVATE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>      
)     

Module1-CMakeLists.txt (3):

add_library(Module1 OBJECT   
    ${CMAKE_CURRENT_SOURCE_DIR}/src/add.cpp 
    ${CMAKE_CURRENT_SOURCE_DIR}/src/sub.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/functions2mock.cpp
)

target_include_directories(Module1 
    PUBLIC 
        ${CMAKE_CURRENT_SOURCE_DIR}/inc
    PRIVATE
        $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>  
)
target_link_libraries(Module1 PRIVATE Module2)

Я думал с помощью команды "target_link_libraries" Module1 getвсе общедоступные, флаги и т. д. из Module2.

Надеюсь, кто-нибудь может мне помочь, спасибо.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...