Cmake не собирает статическую библиотеку в Windows - PullRequest
0 голосов
/ 07 июня 2018

У меня странная проблема, когда CMake в Windows работает без проблем, но затем компилятор фактически не создает библиотеку

project(core)

find_package(spdlog REQUIRED)

set(core_gen_hdr "include/chrono.h" "include/monitoring.h" "${SPDLOG_HEADER_FILES}")

add_library(${PROJECT_NAME} STATIC "${core_gen_hdr}")

target_include_directories (${PROJECT_NAME} PUBLIC "include/" "${SPDLOG_INCLUDE_DIRS}")

source_group("Header Files" FILES "${core_gen_hdr}")

set_property(TARGET ${PROJECT_NAME} PROPERTY FOLDER ${MODULE_NAME})
set_target_properties(${PROJECT_NAME} PROPERTIES LINKER_LANGUAGE CXX)

Интересно, это потому, что только исходные файлы являются заголовочными файлами?При компиляции не создается ни одна библиотека, что создает проблему с зависимыми библиотеками, которые хотят связываться с несуществующим файлом.

Версия CMake - 3.5.0, и я создаю с помощью Visual Studio 2015.

1 Ответ

0 голосов
/ 07 июня 2018

Вам необходимо создать interface library

На самом деле, spdlog также только для заголовка, и делает именно это (см. здесь )

Для вашего проекта вам просто нужно добавить каталоги include вашего проекта, а затем ссылку на spdlog, и cmake отсортирует переходные зависимости

# create your library, specifying it is an interface-library
add_library(${PROJECT_NAME} INTERFACE)

# add your project's directories
target_include_directories(
    ${PROJECT_NAME}
    INTERFACE
    ${CMAKE_CURRENT_SOURCE_DIR}/include)

# link against spdlog, which is also just an interface-library
target_link_libraries(${PROJECT_NAME} spdlog)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...