从标题可能看起来很简单,但对于像我这样的新手,它花了大约2天,还没有弄清楚. CMake版本:3.25.我正在为我的项目使用CMake,我需要使用特定版本的curl库(7.8)。我的Ubuntu系统安装了不同的版本(7.5)。我在一个自定义位置下载了curl(7.8),并libcurl.so在同一个自定义位置生成了www.example.com。我想使用CMake链接位于自定义位置而不是系统提供curl库。
在gcc中,我检查了,我可以在-I & -Wl、rpath选项的帮助下完成。在CMake中,我浏览了它的文档,它建议使用find_library(),但我无法使CMake方式工作。下面是我的CMakeLists.txt,正如你所看到的,我尝试了许多选项。2我正在使用vscode以及命令行来构建Cmake。3任何帮助都非常感谢。
cmake_minimum_required(VERSION 3.5)
project(my_project)
file(GLOB_RECURSE GENR_INCLUDE RELATIVE ${CMAKE_SOURCE_DIR} "inc/*.h")
link_directories()
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-unknown-pragmas -g -D_GNU_SOURCE \
-D_USINGLIBC -lrt -Wall -pthread -g"
)
set(CUSTOM_LIB_PATH ${CMAKE_SOURCE_DIR}/static_libraries)
set(CURL_LIB_PATH ${CUSTOM_LIB_PATH}/pc_intel/curl/curl-7.85.0)
set(CMAKE_PREFIX_PATH ${CURL_LIB_PATH})
find_library(CURL_LIBRARY
NAMES curl libcurl
HINTS ${CURL_LIB_PATH})
message(CURL_LIBRARY=${CURL_LIBRARY})
add_compile_definitions(MY_PROJECT)
file(GLOB_RECURSE DRIVER_SOURCE_FILES RELATIVE ${CMAKE_SOURCE_DIR} "src/drivers/*.c")
add_executable (my_project ${DRIVER_SOURCE_FILES}
${CMAKE_CURRENT_SOURCE_DIR}/src/manager.c
)
target_link_libraries (my_project PUBLIC
${CURL_LIBRARY}
)
消息()始终将标准库显示为CURL_LIBRARY,当我们打印版本时,也是标准库(7.5)。
**更新:**添加后,我可以看到自定义库被选中
set(CMAKE_FIND_USE_CMAKE_SYSTEM_PATH FALSE)
但现在它在链接器中失败,因为libcurl API的符号未定义。
1条答案
按热度按时间a11xaf1n1#
我通过添加以下内容解决了这个问题:
从中学到的关键是,每次尝试CMakeLists.txt时,我们都应该删除CMakeCache.txt