我如何告诉cmake我想我的项目静态链接库?

我正在尝试使用在Linux上运行的CMake构build一个基于OpenCV的项目。 到目前为止,我的CMakeLists.txt文件看起来像

 FIND_PACKAGE (OpenCV REQUIRED) ... TARGET_LINK_LIBRARIES (my-executable ${OpenCV_LIBS}) 

但是这会导致dynamic链接的库。 我如何链接静态库

Solutions Collecting From Web of "我如何告诉cmake我想我的项目静态链接库?"

您可以通过在CMake中将BUILD_SHARED_LIBS标志设置为false来构建静态OpenCV库。 然后你需要做的就是用这些静态库来构建你自己的应用程序,在你的CMakeLists.txt添加一个对OpenCV的依赖:

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

CMake会照顾一切。

要静态链接所有内容,我相信您正在寻找CMAKE_EXE_LINKER_FLAGS (add -static )。

你使用OpenCVConfig.cmake的“简单方法”吗? 或较旧的FindOpenCV.cmake?

实际上这个问题似乎已经在OpenCV自带的OpenCVConfig.cmake中被修复了。 你所要做的就是在你的CMakeLists.txt定义OpenCV_STATIC 。 即

 set(OpenCV_STATIC ON) find_package(OpenCV REQUIRED) 

AFAIK这有点棘手,因为CMake,更确切地说find_library命令,更喜欢共享的库,并找到这些如果共享和静态都可用。

我仍然在寻找一个很好的解决方案,以便能够“尽可能静态”编译二进制文件,但是我还没有找到优雅的解决方案。 它肯定会工作的唯一方法是通过自定义的FindXXXX模块实现一切。

请注意,如果你传递了-static选项, gcc拒绝链接 ,但是你在链接参数中有动态链接库 – 如果你只是简单地使用FindOpenCV.cmake,并且这个动态链接库(我不知道OpenCVConfig .cmake表现虽然)…

在add_library行指定静态。 请参阅http://www.cmake.org/cmake/help/cmake-2-8-docs.html#command:add_library

更正,因为你正在寻找链接静态库我会看看CMAKE_FIND_LIBRARY_SUFFIXES属性