CMake 找不到源文件(add_executable)

新手上路,请多包涵

我一直在尝试在此处遵循供应商的教程: CMake-Tutorial ,查看此处的文档: Cmake-Documentation ,并使用 YouTube 上的资源尽可能地自我教育,但我真的很难为工作环境设置好与 OpenGL。在修改了 Glitter 样板和 open.gl 和 learnopengl.com 上的教程后,我决定理解构建过程太重要了,不去研究。

在我的调查中,我遇到了 CMake 错误“找不到源文件”,如下所示。问题似乎是由“add_executable”引起的。

这里问了一个类似的问题: CMake - 找不到文件。解决方案涉及确保 ${PROJECT_SOURCE_DIR} 为每个变量正确设置,我相信我已经做到了。

我的文件结构:

 + infuriating_project
    + bin // post compile results
    + src // my humble code
    + deps // external code
        +glew
            + include
            + src
        +glfw
            + include
            + src
        +glm
        +soil
            + lib
            + src

我的 CMakeLists.txt:

 cmake_minimum_required (VERSION 3.0)

# Version Information ---------------------------------------------------------
project (openGL-practice)
SET (VERSION_MAJOR 1)
SET (VERSION_MINOR 0)
SET (VERSION_FEATURE 0)
SET (VERSION_PATCH 0)
SET (VERSION "${VERSION_MAJOR}.${VERSION_MINOR}")
SET (VERSION "${VERSION}.${VERSION_FEATURE}.${VERSION_PATCH}")
MESSAGE ("Version: ${VERSION}")

# Configure Source & Binary Directories ---------------------------------------
SET (PROJECT_ROOT "${PROJECT_SOURCE_DIR}")
SET (PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/src")
SET (PROJECT_BINARY_DIR "${PROJECT_BINARY_DIR}/bin")
MESSAGE ("Source path: ${PROJECT_SOURCE_DIR}")
MESSAGE ("Binary path: ${PROJECT_BINARY_DIR}")

# Configure Depenency Directories ---------------------------------------------
SET (PROJECT_DEPS "${PROJECT_ROOT}/deps")
SET (glew_inc "${PROJECT_DEPS}/glew/include/GL/")
SET (glew_src "${PROJECT_DEPS}/glew/src/")
SET (glfw_inc "${PROJECT_DEPS}/glfw/include/GLFW/")
SET (glfw_src "${PROJECT_DEPS}/glfw/src/")
SET (glm "${PROJECT_DEPS}/glm/glm/")
SET (soil_lib "${PROJECT_DEPS}/lib/")
SET (soil_src "${PROJECT_DEPS}/src/")

# Include directories ---------------------------------------------------------
include_directories("
    ${PROJECT_SOURCE_DIR}
    ${PROJECT_BINARY_DIR}
    ${glew_inc}
    ${glew_src}
    ${glfw_inc}
    ${glfw_src}
    ${glm}
    ${soil_lib}
    ${soil_src}
    ${PROJECT_ROOT}
    ")

# Add executable --------------------------------------------------------------
add_executable(main main.cpp)

提供以下错误:

 CMake Error at CMakeLists.txt:46 (add_executable):
  Cannot find source file:

    main.cpp

  Tried extensions .c .C .c++ .cc .cpp .cxx .m .M .mm .h .hh .h++ .hm .hpp
  .hxx .in .txx

CMake Error: CMake can not determine linker language for target: main
CMake Error: Cannot determine link language for target "main".

任何和所有的帮助将不胜感激。

原文由 assemblyDruid 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 4.1k
1 个回答

有几点我想提一下。

  1. include_directories 帮助查找头文件。源文件必须始终具有完整的相对路径。

假设您的 main.cpp 在 src 中,正确的语法是

   add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp)

  1. 包括 ${PROJECT_BINARY_DIR} 没有意义。

  2. 覆盖 CMake 默认变量,如 ${PROJECT_SOURCE_DIR} 不是好的做法。将来你会永远记得你做过这样的事情,而对于另一个程序员来说,这是完全出乎意料的。

希望能帮助到你。

原文由 guenni_90 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题