CMake / cygwin和find_library找不到.lib库

时间:2017-05-24 17:58:34

标签: c cmake cygwin bonjour

我想在我的 cygwin 项目用于Windows的Bonjour库中使用。我已安装此库,但我有dnssd.lib个文件,但 CMake 找不到此库。

如果我使用此代码:

  find_path(BONJOUR_PATH dns_sd.h
            PATHS "$ENV{BONJOUR_SDK_HOME}/Include")
    find_library(BONJOUR_LIBRARY
            NAMES dnssd.lib
            PATHS "$ENV{BONJOUR_SDK_HOME}/Lib/x64")
    include_directories(BONJOUR_PATH)

我收到了这样的错误消息:

  

CMake错误:此项目中使用了以下变量,但是   它们设置为NOTFOUND。请设置它们或确保它们已设置   并在CMake文件中正确测试:BONJOUR_LIBRARY(ADVANCED)

只有当我在if(CYGWIN) /* code */ endif()内部包含上面的代码时才会发生这种情况,但如果我将它包装在if(WIN32) /* code */ endif()中,那么它会正确地找到库。

为什么会这样?

1 个答案:

答案 0 :(得分:0)

虽然这个答案可能不适用于OP的具体情况,但我相信它确实适用于这个问题。就我而言,我正在使用cmake& Cygwin,但我正在尝试运行一个最初在Linux上用cmake v2.8完成的cmake项目。就我而言,我使用的是cmake v3.6.2,Cygwin v2.9.0-2,Windows 10。

为了让cmake找到这些库,我添加了以下声明:

IF (CYGWIN)
  SET (CMAKE_FIND_LIBRARY_PREFIXES "")
  SET (CMAKE_FIND_LIBRARY_SUFFIXES ".lib" ".LIB" ".dll" ".DLL")
ELSE()
  SET (CMAKE_FIND_LIBRARY_PREFIXES "lib")
  SET (CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".a")
ENDIF (CYGWIN)

请注意,我在所有大写字母中添加了lib和dll,因为虽然windows不区分大小写,但是cmake是。

感谢Domen Vrankar指出前缀问题以及here