- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 cmake 的新手,并尝试创建一个需要一些 3rd-party 库的小项目。我希望将库作为 git repos 始终保持最新。一些库只是 .cpp 和 .hpp 文件(glad、imgui),而其他库是 cmake 项目(glfw、glm)。
这个想法是有一个包含所有库的第 3 方项目作为一种子项目和一个使用库和包含等的沙盒项目。
而且我想使用不会在框架结构之外安装任何东西的现代 cmake 代码。
文件夹结构:
Framework
|--3rd_party
| |--glad
| | |--include
| | |--src
| |--glfw-master
| | |--...
| | |--CMakeLists.txt
| |--glm-master
| | |--..
| | |--CMakeLists.txt
| |--imgui-master
| | |--*.cpp
| | |--*.hpp
| | |--examples
| | | |--*.cpp
| | | |--*.hpp
| |--CMakeLists.txt
|--sandbox
| |--main.cpp
| |--CMakeLists.txt
|--CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(Framework)
add_subdirectory("3rd_party")
add_subdirectory("sandbox")
#GLFW
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
add_subdirectory(glfw-master)
# GLM
set(GLM_TEST_ENABLE OFF CACHE BOOL "" FORCE)
add_subdirectory(glm-master)
# Glad
add_library(
Glad STATIC
"glad/src/glad.c"
)
target_include_directories(Glad PUBLIC "glad/include")
# ImGui
add_compile_definitions(IMGUI_IMPL_OPENGL_LOADER_GLAD=1)
set(IMGUI_SOURCES
"imgui-master/imgui.cpp"
"imgui-master/imgui_demo.cpp"
"imgui-master/imgui_draw.cpp"
"imgui-master/imgui_widgets.cpp"
"imgui-master/examples/imgui_impl_glfw.cpp"
"imgui-master/examples/imgui_impl_opengl3.cpp"
)
set(IMGUI_HEADERS
"imgui-master/imconfig.h"
"imgui-master/imgui.h"
"imgui-master/imgui_internal.h"
"imgui-master/imstb_rectpack.h"
"imgui-master/imstb_textedit.h"
"imgui-master/imstb_truetype.h"
"imgui-master/examples/imgui_impl_glfw.h"
"imgui-master/examples/imgui_impl_opengl3.h"
)
add_library(
ImGui STATIC
${IMGUI_SOURCES}
${IMGUI_HEADERS}
)
target_include_directories(ImGui PUBLIC "imgui-master" "glfw-master/include" "glad/include")
project(Sandbox)
find_package(OpenGL REQUIRED)
add_executable(sandbox main.cpp)
# OpenGL
target_include_directories(Sandbox PUBLIC ${OPENGL_INCLUDE_DIR})
target_include_directories(Sandbox PUBLIC external)
# Glfw
target_include_directories(Sandbox PUBLIC "../3rd_party/glfw-master/include")
# Link libs
target_link_libraries(Sandbox PUBLIC
${OPENGL_LIBRARIES}
"../3rd_party/glfw-master/src/Debug/glfw3"
Glad
ImGui
glm_static
)
./framework.sln
./sandbox/sandbox.sln
./3rd_party/glfw-master/glfw.sln
最佳答案
在进一步调查和 CMake 的大量尝试和错误之后,我想我是从错误的期望和一些误解开始的。
不可能从 CMake 文件中为 Visual Studio 获得有用的解决方案/项目结构,因为所有 CMake 项目都将生成 VS 解决方案,并且所有 add_library 或 add_executable 都将是 VS 项目。如果我想为我的框架创建一个 CMake 项目并将 GLFW 添加为第三方,这也会创建一个 CMake 项目,它将以两个不同的 VS 解决方案结束,并且结构消失了。我认为这就是为什么微软在 Visual Studio 中为 CMake 文件引入了一个特殊的开放上下文。
如果使用此上下文打开项目,“解决方案”查看器会显示项目的文件夹结构。这或多或少是我一开始所期望的。
还有一个选项可以切换 View 以查看所有 CMake 目标(exec、libs、...)。
我还“升级”了我的 CMakeLists。我使用不同的方式添加第三方库:
cmake_minimum_required(VERSION 3.10)
project(OpenGL_Framework
VERSION 0.0.1
LANGUAGES CXX C # C for GLFW
)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
add_subdirectory(ThirdParty)
add_subdirectory(Sandbox)
# GLFW
set(GLFW_LIB_NAME "GLFW")
set(GLFW_INC_PATH ${GLFW_LIB_NAME}/include)
set(GLFW_BUILD_DOCS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_TESTS OFF CACHE BOOL "" FORCE)
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "" FORCE)
#set(GLFW_VULKAN_STATIC OFF CACHE BOOL "" FORCE) # OFF by default
#set(BUILD_SHARED_LIBS OFF CACHE BOOL "" FORCE) # OFF by default
set(GLFW_INSTALL OFF CACHE BOOL "" FORCE)
add_subdirectory(${GLFW_LIB_NAME})
# spdlog
set(SPDLOG_LIB_NAME "spdlog")
set(SPDLOG_MASTER_PROJECT OFF CACHE BOOL "" FORCE)
add_subdirectory(${SPDLOG_LIB_NAME})
# OR
#set(SPDLOG_LIB_NAME "spdlog")
#set(SPDLOG_SRC_PATH ${SPDLOG_LIB_NAME}/src)
#set(SPDLOG_INC_PATH ${SPDLOG_LIB_NAME}/include)
#add_library(${SPDLOG_LIB_NAME}
# STATIC
# ${SPDLOG_SRC_PATH}/spdlog.cpp
#)
#target_include_directories(${SPDLOG_LIB_NAME}
# PUBLIC
# ${SPDLOG_INC_PATH})
# glm
set(GLM_LIB_NAME "glm")
set(GLM_INC_PATH ${GLM_LIB_NAME}/glm)
add_library(${GLM_LIB_NAME} INTERFACE)
target_include_directories(${GLM_LIB_NAME}
INTERFACE
${GLM_INC_PATH}
)
# OR
#set(GLM_LIB_NAME "glm")
#set(GLM_INC_PATH ${GLM_LIB_NAME}/glm)
#set(GLM_TEST_ENABLE OFF CACHE BOOL "" FORCE)
#add_subdirectory(${GLM_LIB_NAME})
#target_include_directories(${GLM_LIB_NAME}
# PUBLIC
# $(GLM_INC_PATH)
#)
# Glad
set(GLAD_LIB_NAME "Glad")
set(GLAD_SRC_PATH "${GLAD_LIB_NAME}/src")
set(GLAD_INC_PATH "${GLAD_LIB_NAME}/include")
add_library( ${GLAD_LIB_NAME}
STATIC
"${GLAD_SRC_PATH}/glad.c"
)
target_include_directories(${GLAD_LIB_NAME}
PUBLIC
"${GLAD_INC_PATH}"
)
# ImGui
set(IMGUI_LIB_NAME "ImGui")
set(IMGUI_SOURCES
"${IMGUI_LIB_NAME}/imgui.cpp"
"${IMGUI_LIB_NAME}/imgui_demo.cpp"
"${IMGUI_LIB_NAME}/imgui_draw.cpp"
"${IMGUI_LIB_NAME}/imgui_widgets.cpp"
"${IMGUI_LIB_NAME}/examples/imgui_impl_glfw.cpp"
"${IMGUI_LIB_NAME}/examples/imgui_impl_opengl3.cpp"
)
set(IMGUI_HEADERS
"${IMGUI_LIB_NAME}/imconfig.h"
"${IMGUI_LIB_NAME}/imgui.h"
"${IMGUI_LIB_NAME}/imgui_internal.h"
"${IMGUI_LIB_NAME}/imstb_rectpack.h"
"${IMGUI_LIB_NAME}/imstb_textedit.h"
"${IMGUI_LIB_NAME}/imstb_truetype.h"
"${IMGUI_LIB_NAME}/examples/imgui_impl_glfw.h"
"${IMGUI_LIB_NAME}/examples/imgui_impl_opengl3.h"
)
set(IMGUI_INC_PATH "${IMGUI_LIB_NAME}/")
add_library(${IMGUI_LIB_NAME}
STATIC
${IMGUI_SOURCES}
${IMGUI_HEADERS}
)
target_compile_definitions(${IMGUI_LIB_NAME}
PRIVATE
IMGUI_IMPL_OPENGL_LOADER_GLAD=1
)
target_include_directories(${IMGUI_LIB_NAME}
PUBLIC
"${IMGUI_INC_PATH}"
"${GLFW_INC_PATH}"
"${GLAD_INC_PATH}"
)
project(Sandbox)
find_package(OpenGL REQUIRED)
add_executable(${PROJECT_NAME} Sandbox.cpp)
target_include_directories(${PROJECT_NAME}
PUBLIC
external
${OPENGL_INCLUDE_DIR}
)
target_link_libraries(${PROJECT_NAME}
PUBLIC
${OPENGL_gl_LIBRARY}
glfw
Glad
ImGui
glm
#glm_static # if build with add_subdirectory
spdlog::spdlog
)
关于cmake - 如何使用不同的 3rd-party 库构建 cmake 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57535712/
我有以下类(class): @XmlAccessorType(XmlAccessType.FIELD) @XmlType(name = "Party", propOrder = { "comp
我有一个 maven 仓库中不存在的第三方 jar,我们称它为“a.jar”,它也依赖于至少 20 多个第三方 jar,其中大部分不在 maven 中或者,我们称它们为“b.jar、c.jar、d.j
我正在尝试做 this simple question今天从 spoj 开始,它是背包问题,我已经实现如下: #include #include #include #include using
我想用 party 库中的 cforest 函数来衡量特征的重要性。 我的输出变量在 0 类中有 2000 个样本,在 1 类中有 100 个样本。 我认为避免类不平衡造成偏差的一个好方法是使用子样本
“当事人模型”是用于关系数据库设计的“模式”。至少其中一部分涉及寻找许多实体(例如客户,员工,合作伙伴等)之间的共性,并将其作为更多“抽象”数据库表的要素。 我想了解您对以下方面的看法: 政党模式背后
我知道之前曾有人问过这个问题,但是没有一个答案能解决我的问题。错误“3rd-party Gradle插件可能是原因”仍然在android studio中,并且我已经尝试了所有方法:取消了Instant
我正在使用gson在我的 API 中。 Gson#fromJson 抛出运行时异常,即 JsonSyntaxException。 JsonSyntaxException This exception
我在 R 中使用 party 包。 我想从结果树的各个节点获取各种统计数据(均值、中位数等),但我不知道如何执行此操作。例如 airq <- subset(airquality, !is.na(Ozo
我正在寻找一个代码片段,我已经看到它对学生有启发,该代码片段将处理 2 个音频文件,用 2 个间隔开的麦克风录制,录制“鸡尾酒”派对,这将产生 2 个或更多单独的输出基于差分延迟来隔离不同的声音。 我
我写信是为了澄清本网站上的一些评论。 1) 我知道 C++ 没有垃圾收集器。有人说 C++ 是在垃圾收集器思想出现之前发明的,这就是原因。真的吗?我认为这是有道理的。 2) 每当讨论垃圾收集器时,都会
我想比较一下CART和CHAID算法,我选择rpart(cart algorithm)和party(chaid algorithm)来看看它们的区别。 我的数据是关于血压的: 派对功能返回我: lib
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
我必须在VB6应用程序中使用第三方ActiveX DLL。但是,现在我已经将DLL包含在引用中并在代码中使用了它,每次我退出应用程序时,它也会也退出VB6。 我在日志或事件查看器中看不到任何东西可以说
我确切地知道“第三方库”是什么,所以我认为这种情况下的“第三方”只是开发者以外的任意个人或公司? 这与“第一人称”、“第二人称”和“第三人称”语法观点有关吗? 存在“第三方”的事实表明也存在“第一方”
我创建了几个 ctree 模型(大约 40 到 80 个),我想经常对其进行评估。 一个问题是模型对象非常大(40 个模型需要超过 2.8G 的内存),在我看来,它们存储了训练数据,可能作为 mode
我正在研究 Operator-SDK。在我的运算符(operator) Controller 中,我尝试创建一个 Istio 自定义资源——虚拟服务。虚拟服务的定义如下: kind: CustomRe
我正在使用 Party R 包的 ctree 方法生成决策树。 我的数据集有大约 22 列和 650000 行数据。我使用 memory.limit 命令为我的 r session 分配了 10GB
我已提及convert data.frame column format from character to factor和 Converting multiple data.table column
我有一个第三方 Java 小程序,我打算将其嵌入到我的网页中但我无权访问该小程序代码。 但我想在我的页面上创建一个按钮,单击该按钮将创建小程序的屏幕截图(但不是整个屏幕)。我尝试使用 Robot 类,
在我们目前正在进行的项目中,我们需要依赖预编译的第 3 方框架。有什么方法可以确保它无法打开网络连接并发送 secret 数据? 编辑: 为了更清楚一点:它不必在运行时。静态检查没问题。我更多的是在想
我是一名优秀的程序员,十分优秀!