How do I tell cmake I want my project to link libraries statically?

后端 未结 7 543
暗喜
暗喜 2020-12-14 02:15

I\'m trying to build an OpenCV-based project using CMake, running on Linux. So far my CMakeLists.txt files looks something like

FIND_PACKAGE (Op         


        
相关标签:
7条回答
  • 2020-12-14 02:33

    Actually this issue seems to have already been fixed in the OpenCVConfig.cmake that comes with OpenCV. All you have to do is define OpenCV_STATIC in your CMakeLists.txt. I.e.

    set(OpenCV_STATIC ON)
    find_package(OpenCV REQUIRED)
    
    0 讨论(0)
  • 2020-12-14 02:36

    on the add_library line specify static. See http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:add_library

    Correction since you are looking to link against a static library I would look into the CMAKE_FIND_LIBRARY_SUFFIXES property

    0 讨论(0)
  • 2020-12-14 02:37

    To link everything statically, I believe you're looking for CMAKE_EXE_LINKER_FLAGS (add -static).

    Are you using the 'simple method' of OpenCVConfig.cmake? or the older FindOpenCV.cmake?

    0 讨论(0)
  • 2020-12-14 02:41
    SET (CMAKE_EXE_LINKER_FLAGS "-static")
    
    0 讨论(0)
  • 2020-12-14 02:44

    You build static OpenCV libraries by just setting the BUILD_SHARED_LIBS flag to false in CMake. Then all you need to do to build your own application with those static libraries is to add a dependency on OpenCV in your CMakeLists.txt:

    FIND_PACKAGE (OpenCV REQUIRED)
    ...
    TARGET_LINK_LIBRARIES (your-application ${OpenCV_LIBS})
    

    and CMake will take care of everything.

    0 讨论(0)
  • 2020-12-14 02:55

    AFAIK that's a bit tricky, because CMake, more precisely the find_library command, prefers shared libs and finds those if both shared and static are available.

    I'm still looking for a good solution myself to be able to compile binaries "as static as possible", but I've found no elegant solution yet. The only way it would surely work is to implement everything through custom FindXXXX modules.

    0 讨论(0)
提交回复
热议问题