gpt4 book ai didi

c - 如何从仅 header 库构建静态库

转载 作者:太空宇宙 更新时间:2023-11-04 04:15:14 26 4
gpt4 key购买 nike

我正在尝试构建项目的静态库 stb ,所以我可以将它链接到另一个项目(不是用 C/C++ 编写的)。

我已经创建了 CMakeLists.txt 文件来使用 CMake 构建它,但是构建的静态库文件是空的。

我怀疑这是因为 stb 似乎是header-only 库。我尝试使用 target_compile_definitions 设置 LIBRARY_HEADER_ONLY 标志,但这并没有解决我的问题。

如何将仅 header 库构建为静态库文件 (*.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})

最佳答案

要获取目标文件并从仅 header 库 构建静态库,额外的.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"

.c 文件中包含头文件 (stb_image.h) 和定义所需的宏 (STB_IMAGE_IMPLEMENTATION) 是解决方案从构建中获取目标文件和静态库(具有适当的内容)。

关于c - 如何从仅 header 库构建静态库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52927351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com