Я не понимаю, почему путь к файлу Console_Export.hpp не был добавлен в мой проект VS 2017.
Сейчас у меня есть общая библиотека ConsoleDraw со следующей структурой
Верхний уровень 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)