내가 GitHub의에서 직접 전체 glfm 프로젝트를 가져 오지하기 위해 externalProject_add
명령을 사용하고 있습니다 통해 검색 파일에 dpendencies을 처리한다. 이 체크 아웃의 일환으로 두 파일은 git을 통해 검색됩니다. 이 두 파일 (glad.c 및 glad.h)은 내 프로젝트의 소스 종속성으로 추가해야합니다.CMake 방법 externalProject_add
불행히도 CMake는 나중에 빌드하는 동안 다운로드되기 때문에 정확이 파일이없는 세대 동안 준수합니다.
오류 메시지 :
가CMake Error at CMakeLists.txt:79 (add_executable):
Cannot find source file:
H:/Documents/Visual Studio 2013/Projects/BuildCMakeExternalOpenGL/glfw -prefix/src/glfw/deps/glad/glad.h
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: CMakeExternalTemplate
Generating done
가 어떻게이 문제를 해결할 수 있습니까?
은 내 CMake 파일 :cmake_minimum_required(VERSION 2.8.4)
project(CMakeExternalTemplate)
include(ExternalProject)
set(EXTERNAL_LIB_DIR ${PROJECT_BINARY_DIR}/libs)
#CMakeExternalTemplate
# -- Vars
set(CMakeExternalTemplate_SOURCE_FILES main.cpp)
set(CMakeExternalTemplate_INCLUDE_DIRS)
# -- GLM
set(glm_INSTALL_DIR ${EXTERNAL_LIB_DIR}/glm)
externalProject_add(glm
GIT_REPOSITORY https://github.com/g-truc/glm.git
GIT_TAG 0.9.8.1
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${glm_INSTALL_DIR}")
ExternalProject_Get_Property(glm source_dir)
set(GLM_SRC_DIR ${source_dir})
#GLFW
# -- Vars
set(glfw_INSTALL_DIR ${EXTERNAL_LIB_DIR}/glfw)
set(glfw_INCLUDE_DIRS ${glfw_INSTALL_DIR}/include)
externalProject_add(glfw
GIT_REPOSITORY https://github.com/glfw/glfw.git
GIT_TAG 3.2.1
CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${glfw_INSTALL_DIR}")
ExternalProject_Get_Property(glfw source_dir)
set(GLFW_SRC_DIR ${source_dir})
#Glad
set(GLAD "${GLFW_SRC_DIR}/deps/glad/glad.h"
"${GLFW_SRC_DIR}/deps/glad.c")
include_directories(${GLM_SRC_DIR})
include_directories(${glfw_INCLUDE_DIRS} ${GLFW_SRC_DIR}/deps)
# -- -- CMakeExternalTemplate
include_directories(${CMakeExternalTemplate_INCLUDE_DIRS})
# -- Compile
add_executable(${PROJECT_NAME} ${CMakeExternalTemplate_SOURCE_FILES} ${GLAD})
두 개의 필요한 파일은 glfw의 종속성입니다. 불행하게도 glfw와 똑같은 버전을 사용해야 링크 호환이 가능합니다. 당신은'execute_process'를 사용할 필요가 있을지 모르겠지만 더 쉬운 방법이 있기를 희망합니다. –
@BerndL. afaik에는 이에 대한 프레임 워크가 없습니다. 바이너리의 결과 객체 파일에 링크 만 할 수 있습니까? 헤더가 필요하지 않아야한다는 뜻입니다. 파일 중 하나에 "include"를 추가하면 컴파일됩니다. "해킹"을하고 싶다면 C 파일을 소스 코드에 포함 시키면 좋겠지 만 객체 연결은 더 깨끗해질 것이라고 생각합니다. – Hayt
문제는 링크 할 수 있도록 실행 파일에 glad.c를 추가해야한다는 것입니다. 그러나이 glad.c 파일을 처음 빌드하는 동안 검색하면 늦어집니다. –