CMake: как собрать, а затем связать библиотеку на этапе настройки - PullRequest
0 голосов
/ 25 марта 2019

Я пытаюсь использовать CMake для генерации шаблона проекта OpenGL.Моя установка требует статической библиотеки GLFW https://github.com/glfw/glfw;GLFW также построен с использованием CMake.

Я хотел бы сгенерировать и связать эту библиотеку на этапе настройки моего проекта.Я получил свой CMakeLists.txt, чтобы клонировать его из github, но у меня возникли проблемы с его сборкой в ​​сценарии.Моя идея состояла в том, чтобы пройти следующие шаги:

  1. клонировать библиотеку
  2. выбрать конкретный коммит
  3. настроить файлы glfw cmake в каталоге сборки
  4. построить библиотеку glfw
  5. скопировать библиотеку в соответствующее место и настроить ее для использования.

Однако шаги 3 и 4 завершаются неудачно, когда выполняются вCMakeLists.txt.Я могу вручную перейти к папке сборки для glfw, набрав в терминале следующее:

cmake ..
cmake --build . --config Release

При вводе вышеизложенного создается библиотека.Но выполнение тех же команд в моем CMakeLists.txt не дает таких же результатов, кажется, что пропускается этап настройки, а затем cmake - build.- Сбой этапа выпуска --config с Error: could not load cache

Возможно, это не лучший рабочий процесс, и я открыт для предложений.Я относительно неопытен с написанием CMakeLists.txt.Вот мой CMakeLists.txt

cmake_minimum_required(VERSION 3.0)

project(OpenGLBasedApp VERSION 1.0)


#########################################################################################################
# GLFW
#########################################################################################################


#-----clone GLFW repository-----
set(glfw_dir_rel "./third_party/git_repos/glfw")
message(STATUS "running command:" ${git_clone_glfw_cmd})
execute_process(
    COMMAND git clone https://github.com/glfw/glfw.git ${glfw_dir_rel}
    WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
    OUTPUT_VARIABLE git_glfw_clone_output
    RESULT_VARIABLE git_glfw_clone_result
    ERROR_QUIET
    )
# message(STATUS "clone return status: ${git_glfw_clone_result}") 0 on success, 128 on already cloned

#-----switch to specific commit; change this if you want latest version-----
set(supported_glfw_commit "8d7e5cdb49a1a5247df612157ecffdd8e68923d2")
set(glfw_dir_abs "${PROJECT_SOURCE_DIR}${glfw_dir_rel}")
message(STATUS "${glfw_dir_abs}")
#if(git_glfw_clone_result EQUAL "0")
    message(STATUS "glfw clone successful -- checking out stable commit ${supported_glfw_commit}")
    execute_process(
        COMMAND git checkout ${supported_glfw_commit}
        WORKING_DIRECTORY "${glfw_dir_abs}"
        OUTPUT_VARIABLE glfw_checkout_std_out
        RESULT_VARIABLE glfw_checkout_ret_val
        #ERROR_QUIET
    )
    #message(STATUS ::: ${glfw_checkout_std_out})
    #message(STATUS ::: ${glfw_checkout_ret_val})
#endif()

# ----- build GLFW to use -----

#the output location of this library may be playform dependent and should be tested
#make the directory for build; relative path seems to be required as directory does not show up with concatenated path
set(glfw_build_dir_rel "${glfw_dir_rel}/build")
file(MAKE_DIRECTORY "${glfw_build_dir_rel}")
message(STATUS "building GLFW, this may take a moment...")
execute_process(
    COMMAND cmake ..
    COMMAND cmake --build . --config Release
    WORKING_DIRECTORY "${glfw_build_dir_rel}"
    OUTPUT_VARIABLE glfw_build_out
    RESULT_VARIABLE glfw_build_ret
    #ERROR_QUIET
)
message(STATUS "glfw status: \n ${glfw_build_ret}")
message(STATUS "glfw build:  \n ${glfw_build_out}")


#########################################################################################################
# Main Application
#########################################################################################################

file(GLOB_RECURSE app_files_var 
    "src/*.h"
    "src/*.c"
    "src/*.hpp"
    "src/*.cpp"
)

add_executable(App ${app_files_var})

Я еще не пробовал шаг 5, потому что не могу его успешно построить.Любая помощь будет оценена.

...