gracicot / stb-cmake

A CMake packaged stb library
MIT License
7 stars 4 forks source link

fatal error C1083: Cannot open include file: 'stb_image_resize2.h': No such file or directory #3

Open wuxianggujun opened 1 month ago

wuxianggujun commented 1 month ago

Not sure why this is prompted。 fatal error C1083: Cannot open include file: 'stb_image_resize2.h': No such file or directory

wuxianggujun commented 1 month ago

I found that the clion compilation directory header file could not find this stb_image_resize2.h before it caused an error. I committed all of the project code to ai and it gave me a modified one. It will not report an error and can be compiled normally.

cmake_minimum_required(VERSION 3.4)
project(stb C)

option(STB_EXPORT "Export stb source tree as package" true)
option(STB_INSTALL "Generate stb installation target" true)

set(STB_INSTALL_INCLUDE_DIR "include")

set(STB_FILES "stb_image.h;stb_image_write.h;stb_image_resize2.h;stb_perlin.h")
set(STB_DEFINES "STB_IMAGE_IMPLEMENTATION;STB_IMAGE_WRITE_IMPLEMENTATION;STB_IMAGE_RESIZE_IMPLEMENTATION;STB_PERLIN_IMPLEMENTATION")
set(STB_NAMES "image;image-write;image-resize;perlin")
list(LENGTH STB_FILES STB_LIBRARY_COUNT)
math(EXPR STB_LIBRARY_COUNT "${STB_LIBRARY_COUNT} - 1")

foreach(NTH_STB_LIBRARY RANGE 0 ${STB_LIBRARY_COUNT})
    list(GET STB_FILES ${NTH_STB_LIBRARY} STB_FILE)
    list(GET STB_NAMES ${NTH_STB_LIBRARY} STB_NAME)
    list(GET STB_DEFINES ${NTH_STB_LIBRARY} STB_DEFINE)

    # Copy header files to the binary directory
    file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stb)
    file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/stb/${STB_FILE} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/stb)

    # Configure the source file
    configure_file(stb/${STB_FILE} stb/${STB_NAME}.c COPYONLY)
    add_library(${STB_NAME} ${CMAKE_CURRENT_BINARY_DIR}/stb/${STB_NAME}.c)
    add_library(stb::${STB_NAME} ALIAS ${STB_NAME})
    set_target_properties(${STB_NAME} PROPERTIES OUTPUT_NAME stb-${STB_NAME})
    target_compile_definitions(${STB_NAME} PRIVATE ${STB_DEFINE})
    target_include_directories(${STB_NAME} PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/stb)
    install(TARGETS ${STB_NAME} EXPORT stbTargets ARCHIVE DESTINATION lib)
    target_include_directories(${STB_NAME} INTERFACE
            $<INSTALL_INTERFACE:${STB_INSTALL_INCLUDE_DIR}>
            $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>
    )
endforeach()

# Vorbis is special
file(READ stb/stb_vorbis.c STB_VORBIS_CONTENT)
configure_file(cmake/stb_vorbis.h.in include/stb/stb_vorbis.h)
add_library(vorbis stb/stb_vorbis.c)
add_library(stb::vorbis ALIAS vorbis)
set_target_properties(vorbis PROPERTIES OUTPUT_NAME stb-vorbis)
install(TARGETS vorbis EXPORT stbTargets ARCHIVE DESTINATION lib)
target_include_directories(vorbis INTERFACE
        $<INSTALL_INTERFACE:${STB_INSTALL_INCLUDE_DIR}>
        $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
)

if (STB_INSTALL)
    set(STB_CONFIG_PATH "lib/cmake/stb")

    include(CMakePackageConfigHelpers)

    # build tree package config
    configure_file(
            cmake/stbConfig.cmake.in
            stbConfig.cmake
            @ONLY
    )

    # install tree package config
    configure_package_config_file(
            cmake/stbConfig.cmake.in
            ${STB_CONFIG_PATH}/stbConfig.cmake
            INSTALL_DESTINATION ${STB_CONFIG_PATH}
            NO_CHECK_REQUIRED_COMPONENTS_MACRO
    )

    install(DIRECTORY stb DESTINATION ${STB_INSTALL_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")
    install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/stb DESTINATION ${STB_INSTALL_INCLUDE_DIR} FILES_MATCHING PATTERN "*.h")

    install(
            FILES 
            "${CMAKE_CURRENT_BINARY_DIR}/${STB_CONFIG_PATH}/stbConfig.cmake"
            DESTINATION ${STB_CONFIG_PATH}
    )

    install(
            EXPORT stbTargets FILE stbTargets.cmake
            NAMESPACE stb::
            DESTINATION ${STB_CONFIG_PATH}
    )

    export(
            EXPORT stbTargets
            NAMESPACE stb::
            FILE "${CMAKE_CURRENT_BINARY_DIR}/stbTargets.cmake"
    )
endif()

if (STB_EXPORT)
    export(PACKAGE stb)
endif()
wuxianggujun commented 1 month ago

configure_file(stb/${STB_FILE} stb/${STB_FILE} COPYONLY)