【发布时间】:2018-12-16 02:35:06
【问题描述】:
我正在使用 cmake 为 Windows 生成一个 VisualStudio 项目,并且提供的链接功能似乎不适用于生成的 VisualStudio 项目。
生成的项目是一个库,它依赖另一个库作为依赖项。
项目的生成工作正常,但无论我尝试什么,“附加依赖项”条目下都没有出现任何内容。
我尝试在声明“add_library(MyLib)”之前和之后同时使用“link_libraries”和“target_link_libraries” 例如,我试过这个:
project( MyLib )
...
add_library( MyLib ${source_list} )
...
target_link_libraries ( MyLib ${SOME_LIB_PATH} )
target_link_libraries ( MyLib "${SOME_LIB_PATH}" )
target_link_libraries ( MyLib W:/work/Project/MyLib/ )
target_link_libraries ( MyLib "W:/work/Project/MyLib/" )
target_link_libraries ( MyLib W:/work/Project/MyLib/MyLib.lib )
target_link_libraries ( MyLib "W:/work/Project/MyLib/MyLib.lib" )
target_link_libraries ( MyLib banane )
target_link_libraries ( MyLib whatever )
target_link_libraries ( MyLib "test" )
...
include_directories(
"Include/"
${SOME_LIB_INCLUDE_PATH}
)
尽管包含目录正确显示在项目属性中。 那么这是一个错误还是我错过了什么:)?
【问题讨论】:
-
实际上,您的代码看起来还不错。但是,请注意(静态)库没有相互链接。 (相反,可执行文件链接到这些库。)DLL 是。
MyLib是专门用来做静态库还是DLL? (CMake 中应该有另一个设置来确定这一点,但它没有公开,我不记得是否有默认值。) -
在文档中找到它:BUILD_SHARED_LIBS.
-
这很有趣:我查看了我最近从头开始制作的一个 CMake 项目(而不是重新使用旧的/正在工作的)。我搜索了
BUILD_SHARED_LIBS的定义/分配,但找不到任何东西。哎呀。 (使用它的条件,但没有定义。)然后我查看了一个库的 VS 项目,实际上,它是作为静态库构建的。那不是故意的(尽管它并不麻烦-编写代码以在两种情况下都可以使用)。顺便提一句。我查看了依赖项(依赖于 Qt 的那个库),是的,我可以确认,没有额外的依赖项(因为它们不需要 - 正如我上面解释的那样)。 -
我想这是我的一个很大的误解,看到我不知道库实际上并没有相互链接,当我看到构建成功时我很困惑,尽管 .lib没有链接...
标签: c++ cmake static-libraries