externalProject_add
コマンドを使用して、glfmプロジェクト全体をgithubから直接取得します。このチェックアウトの一環として、gitによって2つのファイルが検索されます。これらの2つのファイル(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})
2つの必要なファイルはglfwの依存関係です。残念ながら、glfwとまったく同じバージョンをリンク互換にする必要があります。あなたは 'execute_process'を使う必要があるかもしれませんが、もっと簡単な方法があることを願っています。 –
@BerndL。 afaikにはこのためのフレームワークはありません。結果のオブジェクトファイルをバイナリにリンクするだけではありませんか?ヘッダーは決して必要ないはずです。あなたはあなたのファイルの1つに "インクルード"を追加するだけで、それがコンパイルされます。あなたが "ハッキー"に行きたいのであれば、Cファイルをソースコードに含めることもできますが、オブジェクトのリンクはもっときれいになると思います。 – Hayt
問題は、実行可能ファイルにglad.cを追加する必要があるということです。しかし、このglad.cファイルが最初のビルド中に取得されると、遅くなります。 –