我的库具有相关行的最少,直接的CMake代码
“Cannot obtain information about the node because the specified selector does not match any node in the DOM tree.”
在Windows下执行时,系统会在add_library(MyLib <sources>)
install(
TARGETS MyLib
LIBRARY DESTINATION ${destination}/lib
RUNTIME DESTINATION ${destination}/lib
COMPONENT Libraries)
install(
FILES mylib.h
DESTINATION ${destination}/include
COMPONENT Headers)
中生成mylib.dll
,并在...\build\Release
中生成mylib.lib
和mylib.exp
(这是什么?)。它只会安装...\build\lib\Release
。
我的应用程序具有最少,直接的CMake代码来搜索我的库:
mylib.dll
哪个可以在Linux下工作,但可以在Windows下工作
find_path(MyLib_INCLUDE_DIR mylib.h)
find_library(MyLib_LIBRARIES NAMES MyLib)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MyLib DEFAULT_MSG MyLib_LIBRARIES MyLib_INCLUDE_DIR)
从实验中我知道,只要只有一个-- Could NOT find MyLib (missing: MyLib_LIBRARIES)
文件并且没有关联的.DLL
导入库,就会发生此错误。
我应该更正MyLib来安装.LIB
吗?怎么样?
或者是否可以修改我的应用程序,使其仅对mylib.lib
满意?怎么样?
这不是静态链接还是动态链接(DLL and LIB files - what and why?,cmake link against dll/lib):我想要mylib.dll
;如果需要dynamic linking
文件,则与静态链接无关。
此链接cmake : shared library : how to get the .lib name instead of .dll name?可能是相关的,但不够明确。其他两个问题CMake generated VS project expecting lib instead of dll,Linking dll/lib to a cmake project似乎相关,但没有答案。
答案 0 :(得分:0)
命令install
将共享库的.lib
文件分类为ARCHIVE。 documentation中明确指出:
对于DLL平台(包括Cygwin的所有基于Windows的系统),DLL导入库被视为
ARCHIVE
目标。
因此,您还需要向install()
添加ARCHIVE子句以安装.lib
文件:
install(
TARGETS MyLib
ARCHIVE DESTINATION ${destination}/lib
LIBRARY DESTINATION ${destination}/lib
RUNTIME DESTINATION ${destination}/bin
COMPONENT Libraries)
同样,RUNTIME DESTINATION通常指定为bin
,与可执行文件的目标相同。这有助于Windows上的可执行文件找到共享库(.dll
)。