我想在我的 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()
中,那么它会正确地找到库。
为什么会这样?
答案 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