似乎 cmake 无法确定当前编译器可以使用哪些库,或者我希望 cmake 仅使用已使用相同编译器编译的库。
我正在使用 find_library 查找所需的库,但似乎无法确定该库是否实际可用。它设法按名称找到库,但是当我为 MinGW 进行配置时,它使用的是“.lib”扩展名。我是否必须为我编译库的每个编译器创建文件夹并在我的脚本中为每个编译器添加 if 语句?这似乎与我认为 find_library 能够做到的事情背道而驰。也许我在滥用它?有人有更好的想法吗?
似乎 cmake 无法确定当前编译器可以使用哪些库,或者我希望 cmake 仅使用已使用相同编译器编译的库。
我正在使用 find_library 查找所需的库,但似乎无法确定该库是否实际可用。它设法按名称找到库,但是当我为 MinGW 进行配置时,它使用的是“.lib”扩展名。我是否必须为我编译库的每个编译器创建文件夹并在我的脚本中为每个编译器添加 if 语句?这似乎与我认为 find_library 能够做到的事情背道而驰。也许我在滥用它?有人有更好的想法吗?
似乎您有点困惑:当您建议您在 Windows 上需要用于 MinGW 和 Visual Studio 的不同库时,您是对的。但是当你说.lib
文件不能被 MinGW 使用时你错了。Visual Studio 和 MinGW 都使用.lib
文件链接到 Windows 上的库。
该find_library
命令的目的只是查找库。仅此而已,所以它在这里完成了它的工作。
如果您想确保找到的库可以被您的编译器使用,您必须检查这些库是否可以被您的编译器使用try_compile
:
find_library(YOURLIB_LIBRARY yourlib)
if (YOURLIB_LIBRARY)
try_compile(YOURLIB_WORKS
bindir
somefile.c
LINK_LIBRARIES ${YOURLIB_LIBRARY})
if (YOURLIB_WORKS)
# do something with your library
else()
# warn the user of stop the configuration process
endif()
endif()