如何在cmake中包含zstd?

问题描述 投票:0回答:1

我试图将 zstd 包含到我的项目中,目前它已包含在内,但它被链接到 cmakelist 文件末尾的主可执行文件,因此除了主文件之外,没有任何内容可以访问 zstd.h。我想在项目文件夹中全局使用 zstd,这样如果我制作一个测试文件并尝试访问 zstd.h 它就可以工作。目前我正在使用c。目前我的 cmakelist 看起来像这样


set(CMAKE_C_STANDARD 23)

set(CMAKE_C_COMPILER gcc)

project(main
    VERSION 1.0.0
    LANGUAGES C)

    
set(CMAKE_EXPORT_COMPILE_COMMANDS 1)
    
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/cwalk)
# link_libraries(cwalk)

# add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/build/cmake)
# target_include_directories(libzstd_static PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/lib/)
add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/build/cmake zstd)
# target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/lib/)


# Add vendor-datastruct library
file(GLOB DATASTRUCT_SOURCES vendor/datastructs/*.c)
file(GLOB DATASTRUCT_HEADERS vendor/datastructs/*.h)
add_library(datastructs ${DATASTRUCT_SOURCES})
target_sources(datastructs INTERFACE ${DATASTRUCT_HEADERS})
target_include_directories(datastructs PUBLIC ${PROJECT_SOURCE_DIR}/vendor/datastructs)

# Add libraries
file(GLOB LIB_SOURCES lib/*.c)
file(GLOB LIB_HEADERS lib/*.h)
add_library(LIB ${LIB_SOURCES})
target_sources(LIB INTERFACE ${LIB_HEADERS})
target_include_directories(LIB PUBLIC ${PROJECT_SOURCE_DIR}/lib)
target_link_libraries(LIB cwalk datastructs)
link_libraries(LIB)

add_executable(main main.c)
target_include_directories(main PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/lib/)

if(WIN32)
    add_executable(test2 test/test2.c)
    add_executable(test3 test/test3.c)
    add_executable(test4 vendor/datastructs/tests.c)
elseif(UNIX)
    add_executable(test1 test/test1.c)
endif()

我无法在任何测试文件中访问 zstd。 请帮助我使用 zstd 或改进此 cmakelist 文件,因为我是第一次使用 cmake

c cmake include
1个回答
0
投票

这对我有用

add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/build/cmake zstd)
target_include_directories(zstd PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/vendor/zstd/lib/)
target_link_libraries(LIB libzstd_static)
© www.soinside.com 2019 - 2024. All rights reserved.