Как собрать статическую библиотеку из библиотеки только для заголовков - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь создать статическую библиотеку проекта stb , поэтому я могу связать ее с другим проектом (не написанным на C / C ++).

Я создал файл CMakeLists.txtчтобы построить его с помощью CMake, однако файл встроенной статической библиотеки пуст.

Я подозреваю, что это связано с тем, что stb, похоже, является библиотекой только для заголовка .Я попытался установить флаг LIBRARY_HEADER_ONLY с помощью target_compile_definitions, однако это не решило мою проблему.

Как создать библиотеку только для заголовков в статическом файле библиотеки (* .a)?Или это вообще возможно?Если нет, то каковы обходные пути, если таковые имеются?

Это мой CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(stb C)

set(MAKE_GENERATOR_PLATFORM x64)
set(CMAKE_C_FLAGS -m64)
set(CMAKE_CXX_FLAGS -m64)

option(STB_IMAGE_IMPLEMENTATION "stb_image implementation" ON)

if(STB_IMAGE_IMPLEMENTATION)
    add_definitions(-DSTB_IMAGE_IMPLEMENTATION)
endif()

option(POSITION_INDEPENDENT_LIB "Use position independent code for static library (if applicable)" ON)
set(SOURCE_FILES stb_image.h stb_truetype.h stb_dxt.h)

add_library(stb_static STATIC ${SOURCE_FILES})
target_compile_definitions(stb_static PUBLIC LIBRARY_HEADER_ONLY)
set_target_properties(stb_static PROPERTIES LINKER_LANGUAGE C)
set_target_properties(stb_static PROPERTIES
        OUTPUT_NAME stb
        POSITION_INDEPENDENT_CODE ${POSITION_INDEPENDENT_LIB})

1 Ответ

0 голосов
/ 20 декабря 2018

Чтобы получить объектные файлы и создать статическую библиотеку из библиотеки только для заголовков , должен существовать дополнительный .c файл.Это связано с тем, что файлы .c содержат инструкции и код.

Различные наборы инструментов могут интерпретировать файл .h по-разному, поэтому простой и переносимый способ создания реализации - создать новый файл .c.

#define STB_IMAGE_IMPLEMENTATION
#define STB_DXT_IMPLEMENTATION
#define STB_TRUETYPE_IMPLEMENTATION

#include "stb_image.h"
#include "stb_dxt.h"
#include "stb_truetype.h"

Включая файлы заголовков (stb_image.h) и определение требуемых макросов (STB_IMAGE_IMPLEMENTATION) в файле .c является решением для получения объектных файлов и статической библиотеки (с соответствующим содержимым) из сборки.

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