我一直在尝试用CMakeLists构建我的项目几天,现在取得了一些成功,但我不确定它究竟是在做什么。如何在CMakeLists中包含外部库?
我目前使用5个外部库。 (Assimp,glew,glfw,glm,DevIL) 我的主要平台是windows,但平台独立性是一大优势。
所以我的问题是如何进行,当我想包括一个外部库到我的项目?
这是我认为迄今为止我所知道的。 (1)如果你是“幸运的”,你可以使用find_library并将它链接到target_link_libraries,这是你很好的选择。 (2)由于glm是一个头文件库,我所需要的只是一个include_directories。 (3)如果外部库具有自己的CMakeLists,则执行add_subdirectory并将include_directories设置为头文件所在的位置。
这是我知道我不明白。
(4)如果外部库有.h文件和.cpp文件但没有CMakeLists。我如何包含(并构建?)这个库?如果外部库有.h文件和.lib或.dll文件,我该如何包含这个库?在这两种情况下! (lib/dll)
在此先感谢您的任何和所有答复!
问候 埃德温
嘿,问题(4):你有一个尚未建立的外部库。你想用你的应用程序的其余部分来构建它吗? 问题(5a):你知道所有这些文件的目录吗? 问题(5b):您的.lib文件,静态链接库或用于.dll的导入库? –
(4)如果我想动态地或静态地包含它,我咀嚼你的意思是?我不知道什么是最好的,所以并不重要。两者的定义都会很棒! (5a)是! (5b)它是一个静态库。不会想象其他明智的。我的例子是assimp。我下载了二进制文件作为一个zip文件夹,它给了我(除其他外)一个lib32/asssimp.lib文件和一个bin32/assimp.dll文件。所以这不是其他DLL的导入库。 – Edvin
(4)如果外部库很大或者将来可能需要更新版本的库,最好是动态链接库。如果它很小,你不关心未来的更新和/或你不想分发你的程序与许多.dll文件,它是最好的静态链接。 (5a)我之所以这样问,是因为如果CMakeLists可能需要包含一个小函数来查找.dll文件,但如果您已经知道它,则会更容易。 –