cmake 导入的库和预编译的头文件

时间:2021-01-02 10:56:36

标签: c++ cmake glm precompiled-headers

我有一个简单的 CMake 项目,组织如下:

ExternalDependencies
 ->glm
   CMakeLists.txt

MasterFolder
CMakeLists.txt (A)
->src
 CMakeLists.txt (B)
 ->include
  precompiled_header.h

(A) 看起来像这样:

project(coffeecup VERSION 0.1 LANGUAGES CXX)

set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED True)

include(ExternalProject)

ExternalProject_Add(glm_project
        PREFIX glm-lib
        GIT_REPOSITORY "git@github.com:g-truc/glm.git"
        GIT_TAG "24a4befe80171966758983173f381ce1ef6c839f"
        SOURCE_DIR "${PROJECT_SOURCE_DIR}/../ExternalDependencies/glm"
        CMAKE_ARGS "-DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR}/libs/glm"
        CMAKE_CACHE_ARGS    -DBUILD_STATIC_LIBS:BOOL=ON
                            -DBUILD_SHARED_LIBS:BOOL=OFF
                            -DGLM_TEST_ENABLE:BOOL=OFF
        UPDATE_COMMAND ""
        INSTALL_COMMAND ""
        )
ExternalProject_Get_property(glm_project BINARY_DIR)
ExternalProject_Add_Step(glm_project custom_install_glm
        WORKING_DIRECTORY "${BINARY_DIR}"
        COMMAND ${CMAKE_COMMAND} -E make_directory "${CMAKE_BINARY_DIR}/libs/glm/lib" "${CMAKE_BINARY_DIR}/libs/glm/include/glm"
        COMMAND ${CMAKE_COMMAND} -E copy glm/glm_static.lib "${CMAKE_BINARY_DIR}/libs/glm/lib"
        COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/../ExternalDependencies/glm/glm" "${CMAKE_BINARY_DIR}/libs/glm/include/glm"
        COMMAND ${CMAKE_COMMAND} -E remove -f  "${CMAKE_BINARY_DIR}/libs/glm/include/glm/CMakeLists.txt"
        DEPENDEES build
        COMMENT           "custom installation process glm_project"
        ALWAYS            TRUE
        )

SET(CMAKE_CONFIGURATION_TYPES "Debug;Release")

file(MAKE_DIRECTORY "${CMAKE_BINARY_DIR}/libs/glm/include")


add_library (glm STATIC IMPORTED)
set_target_properties (glm PROPERTIES IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/libs/glm/lib/glm_static.lib)
target_include_directories(glm INTERFACE ${CMAKE_BINARY_DIR}/libs/glm/include)



add_dependencies(glm glm_project)
add_subdirectory(src)

在 (B) CMakeLists.txt 中:

list(APPEND EXTERNAL_DEPENDENCIES_INCLUDES
        ../../ExternalDependencies/VulkanMemoryAllocator/src
        )

add_executable(coffeecup
        include/PrecompiledHeader.h
        Window.cpp )
set_target_properties(coffeecup PROPERTIES DEBUG_POSTFIX "d")

target_include_directories(coffeecup 
        PUBLIC 
           include
        )

target_link_libraries(coffeecup 
        PUBLIC 
           glm
        )

target_precompile_headers(coffeecup
        PUBLIC
            include/PrecompiledHeader.h
        )

最后,预编译头如下所示:

#pragma once

// >>> GLM <<<
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtx/quaternion.hpp>

// >>> STL <<<
#include <unordered_map>

所以这里的问题是预编译头实际上是在静态库GLM之前构建的 所以它只有在我之前构建我的 GLM 库时才有效 仅当库存在时,如何才能强制构建预编译头文件? 我错过了一些东西,因为我对 CMake 真的很陌生,可能在使用方面存在问题 私人|界面|公共

0 个答案:

没有答案
相关问题