我一直在尝试遵循供应商的教程: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
Run Code Online (Sandbox Code Playgroud)
我的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)
Run Code Online (Sandbox Code Playgroud)
提供以下错误:
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".
Run Code Online (Sandbox Code Playgroud)
任何和所有的帮助将非常感谢.
gue*_*_90 17
我想提一点.
include_directories有助于查找头文件.源文件必须始终具有完整的相对路径.
假设你的main.cpp在src中,正确的语法是
add_executable(main ${PROJECT_SOURCE_DIR}/main.cpp)
Run Code Online (Sandbox Code Playgroud)包括${PROJECT_BINARY_DIR}没有意义.
覆盖CMake默认变量就好${PROJECT_SOURCE_DIR}不好.将来你会永远记得你已经做过这样的事情,对于另一个程序员来说,这是非常意外的.
希望能帮助到你.
在add_executable()通话中,相对路径始终相对于变量CMAKE_CURRENT_SOURCE_DIR或进行解释CMAKE_CURRENT_BINARY_DIR。
如果这些目录的子目录中有源文件,则应明确指定以下子目录:
add_executable(main src/main.cpp)
Run Code Online (Sandbox Code Playgroud)
另外,像这样的变量PROJECT_SOURCE_DIR应被视为只读:虽然CMake未将更改变量视为错误,但它会破坏某些东西。