cmake не включает сгенерированный файл экспорта общей библиотекой - PullRequest
0 голосов
/ 20 октября 2019

Я не понимаю, почему путь к файлу Console_Export.hpp не был добавлен в мой проект VS 2017.

Сейчас у меня есть общая библиотека ConsoleDraw со следующей структурой

enter image description here

Верхний уровень CMakeLists.txt

# CMakeList.txt : Top-level CMake project file, do global configuration
# and include sub-projects here.
#
cmake_minimum_required (VERSION 3.10)

project ("ConsoleDraw" 
         LANGUAGES CXX
         VERSION 0.1.0)

# Include sub-projects.
add_subdirectory (src)

src / CMakeLists.txt

#Create Library
add_library(ConsoleDraw SHARED
    ${CMAKE_CURRENT_SOURCE_DIR}/Console.cpp
)

#Set C++ standard to 17
target_compile_features(ConsoleDraw PUBLIC cxx_std_17)

#Generate Console_Export.hpp which #defines CONSOLE_DRAW_API
include(GenerateExportHeader)

generate_export_header(ConsoleDraw
    EXPORT_MACRO_NAME CONSOLE_DRAW_API
    EXPORT_FILE_NAME ${CMAKE_BINARY_DIR}/include/ConsoleDraw/Console_Export.hpp
)

#Setup include directories
target_include_directories(ConsoleDraw
    PUBLIC
        $<INSTALL_INTERFACE:include>
        $<BUILD_INTERFACE:${CMAKE_SOURCE_DIR}/include>
        $<BUILD_INTERFACE:${CMAKE_BINARY_DIR}/include>
)

set_target_properties(ConsoleDraw PROPERTIES
    ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib
    LIBRARY_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/lib
    RUNTIME_OUTPUT_DIRECTORY ${CMAKE_SOURCE_DIR}/bin
)

include(GNUInstallDirs)

install(TARGETS ConsoleDraw
    EXPORT ConsoleDraw-targets
    ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

install(DIRECTORY ${CMAKE_SOURCE_DIR}/include/ConsoleDraw
    DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
)

install(EXPORT ConsoleDraw-targets
    FILE ConsoleDraw-targets.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ConsoleDraw
)

include(CMakePackageConfigHelpers)

#Generate ConsoleDraw-config.cmake file using -targets.cmake file
configure_package_config_file(
    ${CMAKE_SOURCE_DIR}/cmake/ConsoleDraw-config.cmake.in
    ${CMAKE_BINARY_DIR}/cmake/ConsoleDrawConfig.cmake
    INSTALL_DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ConsoleDraw
)

#Generate Version File
write_basic_package_version_file(
    ${CMAKE_BINARY_DIR}/cmake/ConsoleDraw-config-version.cmake
    VERSION ${PROJECT_VERSION}
    COMPATIBILITY AnyNewerVersion
)

install(
    FILES
        ${CMAKE_BINARY_DIR}/cmake/ConsoleDrawConfig.cmake
        ${CMAKE_BINARY_DIR}/cmake/ConsoleDraw-config-version.cmake
    DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/ConsoleDraw
)

cmake / ConsoleDraw-config.cmake.in

@PACKAGE_INIT@

include(${CMAKE_CURRENT_LIST_DIR}/ConsoleDraw-targets.cmake)
check_required_components("@PROJECT_NAME@")

Console.hpp

#pragma once

#include <string>

#include "ConsoleDraw/Console_Export.hpp"

class CONSOLE_DRAW_API Console
{
  void draw(const std::string& str, int x, int y);
};

Компиляция и установка запускаются успешно, однако, когда я пытаюсь скомпилировать фиктивное приложение с помощью этой библиотеки, он жалуется на отсутствие файла Console_Export.hppв Console.hpp. В приложении CMakeLists.txt я просто делаю следующее, чтобы добавить библиотеку

find_package(ConsoleDraw)

target_link_libraries(${PROJECT_NAME} ConsoleDraw)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...