NoesisGUI-Cmake示例

NoesisGUI-Cmake示例

此示例来自https://github.com/guillaume-haerinck/imac-tower-defense/blob/master/CMakeLists.txt,可作为使用Cmake编写NoesisGUI程序的参考

CMakeLists.txt

# Requirement
cmake_minimum_required(VERSION 2.8)
set(CMAKE_CXX_STANDARD 14)

# ---------------------------------------- PROJECT FILES
project(imac-tower-defense)
file(GLOB_RECURSE MY_SOURCES src/*)

# ---------------------------------------- FIND DEPENDENCIES
# Common on all platform
find_package(OpenGL REQUIRED)
set(
    NOESIS_INCLUDE_DIRS 
    ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Src/Packages/App/Display/Include;
    ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Src/Packages/App/Providers/Include;
    ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Src/Packages/App/ApplicationLauncher/Include;
    ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Src/Packages/Render/GLRenderDevice/Include;
    ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Include;
)
set(FMOD_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/lib/fmod-2.0.0/api/core/inc)
set(BOX2D_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/lib/box2d-2.3.0/include)

if (WIN32) # On windows
    set(SDL2_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/lib/SDL2-2.0.9/include)
    set(SDL2_LIBRARIES ${CMAKE_SOURCE_DIR}/lib/SDL2-2.0.9/lib/windows_x86/SDL2.lib;${CMAKE_SOURCE_DIR}/lib/SDL2-2.0.9/lib/windows_x86/SDL2main.lib)
    set(NOESIS_LIBRARIES ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Lib/windows_x86/Noesis.lib;${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Lib/windows_x86/NoesisApp.lib)
    set(FMOD_LIBRARIES ${CMAKE_SOURCE_DIR}/lib/fmod-2.0.0/api/core/lib/windows_x86/fmod_vc.lib)
    set(BOX2D_LIBRARIES ${CMAKE_SOURCE_DIR}/lib/box2d-2.3.0/lib/windows_x86/Debug/Box2D.lib)
else() # On linux
    find_package(SDL2 REQUIRED)
    set(
        CMAKE_PREFIX_PATH 
        ${CMAKE_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Bin/linux_x86_64;
        ${CMAKE_SOURCE_DIR}/lib/fmod-2.0.0/api/core/lib/linux_x86_64;
        ${CMAKE_SOURCE_DIR}/lib/box2d-2.3.0/lib/linux_x86_64/Debug
    )
    find_library(NOESIS_LIB Noesis)
    find_library(NOESIS_APP_LIB NoesisApp)
    set(NOESIS_LIBRARIES ${NOESIS_LIB} ${NOESIS_APP_LIB})
    find_library(FMOD_LIBRARIES fmod)
    find_library(BOX2D_LIBRARIES Box2D)
endif()

if (SDL2_LIBRARIES)
    message("Found SDL2: " ${SDL2_LIBRARIES})
endif()
if (NOESIS_LIBRARIES)
    message("Found Noesis: " ${NOESIS_LIBRARIES})
endif()
if (FMOD_LIBRARIES)
    message("Found FMOD: " ${FMOD_LIBRARIES})
endif()
if (BOX2D_LIBRARIES)
    message("Found BOX2D: " ${FMOD_LIBRARIES})
endif()

# ----------------------------------------- BUILD DEPENDENCIES IF NEEDED
file(GLOB_RECURSE IMGUI_SOURCES lib/imgui/*)
add_library(IMGUI STATIC ${IMGUI_SOURCES})
add_library(STB_IMAGE STATIC "lib/stb_image/stb_image.cpp")
add_library(GLAD STATIC "lib/glad/src/glad.c")

# ----------------------------------------- INCLUDE DIRECTORIES
include_directories(
    ${OPENGL_INCLUDE_DIR}
    ${SDL2_INCLUDE_DIRS}
    ${NOESIS_INCLUDE_DIRS}
    ${FMOD_INCLUDE_DIRS}
    ${BOX2D_INCLUDE_DIRS}
    lib/glad/include
    lib/entt-cpp14/src
    lib
    src
)

# ------------------------------------------- BUILD PROJECT
set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE})
add_executable(${PROJECT_NAME} ${MY_SOURCES})
target_link_libraries(
    ${PROJECT_NAME}
    ${OPENGL_LIBRARIES}
    ${SDL2_LIBRARIES}
    ${NOESIS_LIBRARIES}
    ${FMOD_LIBRARIES}
    ${BOX2D_LIBRARIES}
    IMGUI
    STB_IMAGE
    GLAD
)

if (UNIX) # Use dynamic linking library
    target_link_libraries(${PROJECT_NAME} -ldl)
endif()

if (WIN32) # Copy .dll to build folder
    add_custom_command(
        TARGET ${PROJECT_NAME} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${PROJECT_SOURCE_DIR}/lib/SDL2-2.0.9/lib/windows_x86/SDL2.dll"
        $<TARGET_FILE_DIR:${PROJECT_NAME}>
    )
    add_custom_command(
        TARGET ${PROJECT_NAME} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_directory
        "${PROJECT_SOURCE_DIR}/lib/NoesisGUI-2.2.0/Bin/windows_x86"
        $<TARGET_FILE_DIR:${PROJECT_NAME}>
    )
    add_custom_command(
        TARGET ${PROJECT_NAME} POST_BUILD
        COMMAND ${CMAKE_COMMAND} -E copy_if_different
        "${PROJECT_SOURCE_DIR}/lib/fmod-2.0.0/api/core/lib/windows_x86/fmod.dll"
        $<TARGET_FILE_DIR:${PROJECT_NAME}>
    )
endif()

CMakeSettings.json

{
  "configurations": [
    {
      "name": "x86-Debug",
      "generator": "Ninja",
      "configurationType": "Debug",
      "inheritEnvironments": [
        "msvc_x86"
      ],
      "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
      "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
      "cmakeCommandArgs": "",
      "buildCommandArgs": "-v",
      "ctestCommandArgs": ""
    }
  ]
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CMake学习 本篇分享一下有关CMake的一些学习心得以及相关使用。 本文目录如下: [1、CMake介绍] [...
    AlphaGL阅读 14,203评论 11 79
  • 什么是 CMake CMake是个一个开源的跨平台自动化建构系统,用来管理软件建置的程序,并不相依于某特定编译器。...
    苏州丸子阅读 22,795评论 6 74
  • 最近在负责一个大型工程的CMake编译系统管理,整理一些工作过程中积累下来的知识片段和技巧。CMake是一个跨平台...
    啊呀哟嘿阅读 12,942评论 0 2
  • 转载自我的博客:CMake 简介和 CMake 模板。 如果你用 Linux 操作系统,使用 cmake 会简单很...
    district10阅读 13,957评论 3 27
  • 本篇文章旨在简介 Android 中 NDK 是什么以及重点讲解最新 Android Studio 编译工具 CM...
    Tsy远阅读 63,727评论 20 213