Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CMake外部库链接?_Cmake - Fatal编程技术网

CMake外部库链接?

CMake外部库链接?,cmake,Cmake,似乎cmake无法确定哪些库可以与当前编译器一起使用,或者更确切地说,我希望cmake只使用使用相同编译器编译的库 我正在使用find_library查找所需的库,但它似乎无法确定该库是否实际可用。它设法按名称查找库,但在我为MinGW进行配置时,它使用了“.lib”扩展名。我是否必须为我编译库的每个编译器创建文件夹,并在脚本中为每个编译器添加if语句?这似乎与我所相信的find_图书馆的功能背道而驰。也许我误用了它?有谁有更好的想法吗?您似乎有点困惑:您建议在Windows上为MinGW和Vi

似乎cmake无法确定哪些库可以与当前编译器一起使用,或者更确切地说,我希望cmake只使用使用相同编译器编译的库


我正在使用find_library查找所需的库,但它似乎无法确定该库是否实际可用。它设法按名称查找库,但在我为MinGW进行配置时,它使用了“.lib”扩展名。我是否必须为我编译库的每个编译器创建文件夹,并在脚本中为每个编译器添加if语句?这似乎与我所相信的find_图书馆的功能背道而驰。也许我误用了它?有谁有更好的想法吗?

您似乎有点困惑:您建议在Windows上为MinGW和Visual Studio需要不同的库,这是对的。但是你说MinGW不能使用
.lib
文件是错误的。Visual Studio和MinGW都使用
.lib
文件链接到Windows上的库

find_library
命令仅用于查找库。没什么了,所以它在这里做它的工作

如果要确保找到的库可供编译器使用,则必须使用
try\u 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()

谢谢你的回答,你至少回答了我的一些问题。我想知道的是,如果你正在构建一个64位的可执行文件,那么如果你有一些变量
FIND_LIBRARY\u USE_lib64\u path
,那么CMake会自动将任何带有“/lib/”的目录更改为“/lib64/”。我想是的。它会,但只在“已知需要它的平台”上,我现在无法检查,但我很确定Windows不在这个平台列表中(因为Windows上没有库的标准位置…),不小心按了enter,它就发布了。。。只允许在5分钟内编辑,因此:
if(MSVC)find_library(MYLIB_library MYLIB path“prebuilded/lib MSVC/MYLIB/”elseif(MINGW)#uhh不确定如何检查编译器(似乎只为MSVC提供了…)find_library(MYLIB_library MYLIB path“prebuilded/lib MINGW/MYLIB/”endif()
而不是为每个编译器编写if语句(idk似乎有一种检查它们的方法;至少我看到了编译器ID的字符串比较,它可以更改)如果有人知道检查complrsYeah的更好方法,可以使用MSVC和MINGW来测试编译器。也可以使用CMAKE_SIZEOF_VOID_P来测试32/64位,看看MINGW在文档中的位置,我可以看到MSVC,但看不到MINGW()。