C++/C正在将第三方库导入CMake



嗨,我想知道这里是否有人可以帮助我在尝试向我的CMake项目添加库时发现我做错了什么:所以最初我建了图书馆https://github.com/recp/cglm在命令行中使用cmake。以下是我所做的

我在桌面上创建了一个构建文件夹(mkdir构建(

  1. 我将目录更改为它(cd构建(
  1. 然后我用cmake创建了sln(cmake/path to/cglm(

之后,我打开Visual Studio 2019,看到了5个项目:ALL_BUILD、cglm、INSTALL、PACKAGE、ZERO_CHECK

我构建了cglm项目,并在构建文件夹中收到了它

然后在构建文件夹的调试文件夹中,我看到了4个文件:cglm.exp、cglm.lib、cgl-0.dll和cglm-0.pdb

然后我转到另一个项目添加库,并创建了以下CMakeLists.txt

cmake_minimum_required (VERSION 3.8)
project ("MathPlease")
add_executable(MathPlease "MathPlease.cpp" "MathPlease.h")
link_directories("path-to/desktop/dev/cglm/build
find_package("cglm")

当我尝试保存时,我收到以下错误

Severity    Code    Description Project File    Line    Suppression State
Warning     CMake Warning at C:UsersasuprsourcereposMathPleaseCMakeLists.txt:14 (find_package):
By not providing "Findcglm.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "cglm", but
CMake did not find one.
Could not find a package configuration file provided by "cglm" with any of
the following names:
cglmConfig.cmake
cglm-config.cmake
Add the installation prefix of "cglm" to CMAKE_PREFIX_PATH or set
"cglm_DIR" to a directory containing one of the above files.  If "cglm"
provides a separate development package or SDK, be sure it has been
installed.    MathPlease  C:UsersasuprsourcereposMathPleaseCMakeLists.txt   14  

如果有人需要cmakeoutput.log,我也可以把它粘贴在这里。任何帮助都将不胜感激!

通常有两种方法-

  1. 安装cglm库&然后在你的项目中使用它
  2. 将cglm作为项目的一部分进行构建

我使用了这两种方法&发现后者要好得多。尤其是出于这些原因的小型项目-

  • 更好的智能感知,您可以跳转到第三方代码,甚至可以编辑
  • 易于打包和运送项目工件
  • 易于在CI中管理,可对第三方项目进行版本升级

我使用FectchContent CMake api来实现这一点。(或者,同样可以通过手动将第三方源代码添加到您的项目中来实现(

现在我还没有亲自处理cglm,但仍然是一个示例构建文件

cmake_minimum_required(VERSION 3.16)
project("MathPlease")
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include(FetchContent)
set(FETCHCONTENT_QUIET FALSE)
fetchcontent_declare(
cglm
GIT_REPOSITORY https://github.com/recp/cglm.git
GIT_TAG v0.8.5
GIT_PROGRESS TRUE
)
if(NOT cglm_POPULATED)
message("populating cglm")
fetchcontent_populate(cglm)
add_subdirectory(${cglm_SOURCE_DIR} ${cglm_BUILD_DIR})
endif()
add_executable(${PROJECT_NAME} MathPlease.cpp)
target_link_libraries(${PROJECT_NAME} cglm)

p.S.FetchContent是一个相当新的CMake功能。您将需要CMake>3.11

最新更新