CMake 链接库 (.a/.so)

Pav*_*vel 5 c++ cmake c++11 clion

我有以下项目文件结构:

libs/
  ???FreeImage/
        ??? FreeImage.dll
        ??? FreeImage.h
        ??? FreeImage.lib
        ??? license-fi.txt
        ??? license-gplv2.txt
        ??? license-gplv3.txt
main.cpp
CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

我的CMakeLists.txt

cmake_minimum_required(VERSION 2.8.4)
project(untitled)

set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

set(FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY libs/FreeImage)
find_path(FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY FreeImage.h)
find_library(FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY freeimage)
include_directories(${FREEIMAGE_LIBRARY_AND_HEADER_DIRECTORY})

set(SOURCE_FILES main.cpp)
add_executable(main ${SOURCE_FILES})

target_link_libraries(main freeimage)
Run Code Online (Sandbox Code Playgroud)

我按照这个来写我的CMakeLists.txt,但它对我不起作用。

输出:

/home/username/main_ssd/soft/linux/portable/clion-140.569.17/bin/cmake/bin/cmake --build /home/username/.clion10/system/cmake/generated/70336599/70336599/Debug --target main -- -j 4
-- Configuring done
-- Generating done
-- Build files have been written to: /home/username/.clion10/system/cmake/generated/70336599/70336599/Debug
Scanning dependencies of target main
[100%] Building CXX object CMakeFiles/main.dir/main.cpp.o
Linking CXX executable main
/usr/bin/ld: cannot find -lfreeimage
collect2: error: ld returned 1 exit status
CMakeFiles/main.dir/build.make:85: recipe for target 'main' failed
make[3]: *** [main] Error 1
CMakeFiles/Makefile2:60: recipe for target 'CMakeFiles/main.dir/all' failed
make[2]: *** [CMakeFiles/main.dir/all] Error 2
CMakeFiles/Makefile2:72: recipe for target 'CMakeFiles/main.dir/rule' failed
make[1]: *** [CMakeFiles/main.dir/rule] Error 2
Makefile:160: recipe for target 'main' failed
make: *** [main] Error 2
Run Code Online (Sandbox Code Playgroud)

Pav*_*vel 2

我已经下载了新版本的 FreeImage 库(从这里)并按照以下说明进行编译:

\n\n
Compiling FreeImagePlus\n-----------------------\nFreeImagePlus is a C++ wrapper for FreeImage. \nTo compile FreeImage as a C++ library, follow these steps : \n1) Enter the FreeImage directory\n2) Build the distribution : \nmake -f Makefile.fip\nmake -f Makefile.fip install\n3) Clean all files produced during the build process\nmake -f Makefile.fip clean\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以我得到了以下库的文件结构:

\n\n
libs/FreeImage/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 FreeImage.h\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 FreeImagePlus.h\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 libfreeimageplus-3.16.0.so\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 libfreeimageplus.a\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 license-fi.txt\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 license-gplv2.txt\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 license-gplv3.txt\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后我修改了我的 CMakeLists.txt,如下所示:

\n\n
cmake_minimum_required(VERSION 2.8.4)\nproject(untitled)\n\nset(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")\n\nfind_path(SIFTGPU_INCLUDE_DIR FreeImage.h)\nfind_library(SIFTGPU_LIBRARY libfreeimageplus)\ninclude_directories(${SIFTGPU_INCLUDE_DIR})\n\nadd_executable(main ${SOURCE_FILES})\n\ntarget_link_libraries(main freeimageplus)\n
Run Code Online (Sandbox Code Playgroud)\n