【问题标题】:Cmakelist working outside of ClionCmakelist 在 Clion 之外工作
【发布时间】:2016-01-25 08:43:07
【问题描述】:

我想使用 Clion 有一段时间了,但我一直在使用 Cmake 时遇到问题。有了 Cygwin 的武装,我差点把这个愚蠢的东西搞定了。

问题是虽然我可以从 cygwin 终端中编译 cmake 文件,但在 Clion 中我被告知它找不到我想要的库。

Error:A required package was not found

cmakelist.txt 文件

cmake_minimum_required(VERSION 3.3)
project(Test)

    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
    set(PKG_CONFIG_PATH /usr/lib/pkgconfig)
    set(PKG_CONFIG_EXECUTABLE /usr/bin/pkg-config.exe)
    set(SOURCE_FILES main.cpp)
    add_executable(Test ${SOURCE_FILES})

    INCLUDE(FindPkgConfig)

    pkg_check_modules(SDL2 REQUIRED "sdl2")

    MESSAGE(STATUS "SDL library:    " ${SDL2_LDFLAGS})

    TARGET_LINK_LIBRARIES(Test ${SDL2_LDFLAGS})

我不知道设置变量 PKG_CONFIG_PATH 和其他变量是否有效,但他们成功构建了一个 makefile 供我在 cygwin 中使用,并且构建正确。

我已经删除了缓存,重新制作了项目和所有内容。它只是拒绝在 Clion 中工作

【问题讨论】:

  • “我可以在 cygwin 终端中编译一个 cmake 文件,在 Clion 中我被告知找不到我想要的库。”没有意义。您无法编译 CMake 文件。 CMake 文件是什么意思?
  • 我真的不知道该怎么说。当我将 cmake 与命令“cmake”一起使用时。它可以编译我的 cmakelist.txt,然后我可以使用 makefile 来制作我的文件。在 Clion 中,它告诉我它找不到 SDL2 库,尽管在 Clion 之外工作。

标签: cmake clion pkg-config


【解决方案1】:

如果我理解正确,您的 cmake 配置无法找到 SDL 库。我发现使用find_package 命令而不是pkg_check_modules 更好。 要使find_package(SDL2) 工作,目录中必须有FindSDL2.cmake 模块,由CMAKE_MODULE_PATH 变量指定(通常是源代码树中的cmake/Modules 目录)。

FindSDL2.cmake 不是 CMake 的一部分,但是你可以很容易地在网上找到一个(查看我自己的模块,例如:https://github.com/dragn/cmake-modules)。 详情请参阅此文档:https://cmake.org/Wiki/CMake:How_To_Find_Libraries

FindSDL2.cmake 放入cmake/Modules 目录并将其添加到您的CMakeLists.txt

set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake/Modules)
find_package(SDL2 REQUIRED)
include_directories(${SDL2_INCLUDE_DIR})

...

target_link_libraries(${PROJECT_NAME} ${SDL2_LIBRARY})

注意:可悲的是,Leonardo 似乎未能在 SDL 社区中找到维护 FindSDL2.cmake 的志愿者:https://cmake.org/Bug/view.php?id=14826

【讨论】:

  • 我希望 CMake 像 Makefile 一样简单。感谢您的帮助,我可以看到 Clion 支持也在推动这种方式。我会试一试,尝试制作或修改其中一个。
  • @LordWindy CMake 努力做的不仅仅是 Makefiles。当您编写 Makefile 时,您编写如何构建,当您编写 CMake 配置时,您编写要构建的内容,CMake 将确定如何执行(理想情况下,在具有任何编译器的任何系统上)。我不知道我的解释是否有意义,只是不要将 CMake 视为 Makefile 的“替代品”,它远不止于此。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-04
  • 2015-01-06
  • 1970-01-01
  • 2023-03-12
  • 2016-02-03
  • 2013-06-20
  • 1970-01-01
相关资源
最近更新 更多