CMakeLists reports error: ld:cannot find -l

CMakeLists reports error: ld:cannot find -l

这是我的 CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)

project(testlib C)

set(CMAKE_C_STANDARD 99)


include_directories(/usr/local/include/)
find_library(iconv_lib iconv)
add_executable(testlib  library.c)
target_link_libraries(testlib libiconv.a)

在此文件夹 /usr/local/include/ 中有以下文件:

iconv.h  localcharset.h

CMake报错:

====================[ Build | testlib | Debug ]=================================
D:\.CLion2019.2\system\cygwin_cmake\bin\cmake.exe --build /cygdrive/d/project/c/testlib/cmake-build-debug --target testlib -- -j 4
Scanning dependencies of target testlib
[ 50%] Building C object CMakeFiles/testlib.dir/library.c.o
[100%] Linking C executable testlib.exe
/usr/lib/gcc/x86_64-pc-cygwin/7.4.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -liconv
collect2: error: ld returned 1 exit status
make[3]: *** [CMakeFiles/testlib.dir/build.make:84: testlib.exe] Error 1
make[2]: *** [CMakeFiles/Makefile2:76: CMakeFiles/testlib.dir/all] Error 2
make[1]: *** [CMakeFiles/Makefile2:83: CMakeFiles/testlib.dir/rule] Error 2
make: *** [Makefile:118: testlib] Error 2

看来您没有使用 find_library() 所在的库,如果确实找到的话。如果没有找到这个库,你可以添加搜索路径来告诉CMake在哪里可以找到这个库:

find_library(iconv_lib 
    NAMES iconv
    PATHS /path/containing/your/iconv/lib
)

最后,使用你在调用target_link_libraries()时定义的iconv_lib变量,像这样:

target_link_libraries(testlib PUBLIC ${iconv_lib})