# 引入CMakeLists.txt(位置:GUI\OpenGL\CMakeLists.txt) 定义了 VIS_FILES 变量,为OpenGL的源文件和头文件
include(${PROJECT_SOURCE_DIR}/GUI/OpenGL/CMakeLists.txt)
# 如果使用IMGUI(默认就用这个)
if (USE_IMGUI)
# 引入GUI\imgui\CMakeLists.txt 定义变量指代源文件 GUI_FILES IMGUI_SOURCE_FILES等
include(${PROJECT_SOURCE_DIR}/GUI/imgui/CMakeLists.txt)
# 设定变量 SIMULATION_LINK_LIBRARIES,其中PBD_LIBRARIES变量在CMake\SetUpExternalProjects.cmake,使用ExternalProject_Add方式引入 PBD
set(SIMULATION_LINK_LIBRARIES imgui SPlisHSPlasH ${PBD_LIBRARIES} PBD_includes)
# 设定变量 SIMULATION_DEPENDENCIES
set(SIMULATION_DEPENDENCIES imgui SPlisHSPlasH Ext_PBD CopySPlisHSPlasHShaders CopyPBDShaders CopyEmitterModels CopyImguiFonts)
# 设定头文件和源文件指代变量 注意在 Simulator 模块内,而非本模块
set(GUI_SOURCE_FILES
${PROJECT_SOURCE_DIR}/Simulator/GUI/imgui/Simulator_GUI_imgui.cpp
PositionBasedDynamicsWrapper/PBD_Simulator_GUI_imgui.cpp
)
set(GUI_HEADER_FILES
${PROJECT_SOURCE_DIR}/Simulator/GUI/imgui/Simulator_GUI_imgui.h
PositionBasedDynamicsWrapper/PBD_Simulator_GUI_imgui.h
)
# 设定 Visual Studio 的分组(其实就是为了方便查看)
source_group("Header Files\\GUI\\imgui" FILES ${GUI_HEADER_FILES})
source_group("Source Files\\GUI\\imgui" FILES ${GUI_SOURCE_FILES})
# 非IMGUI 也就是TweakBar。 不用管了
else()
include(${PROJECT_SOURCE_DIR}/GUI/TweakBar/CMakeLists.txt)
set(SIMULATION_LINK_LIBRARIES AntTweakBar glfw SPlisHSPlasH ${PBD_LIBRARIES} PBD_includes)
set(SIMULATION_DEPENDENCIES AntTweakBar glfw SPlisHSPlasH Ext_PBD CopySPlisHSPlasHShaders CopyPBDShaders CopyEmitterModels)
set(GUI_SOURCE_FILES
${PROJECT_SOURCE_DIR}/Simulator/GUI/TweakBar/Simulator_GUI_TweakBar.cpp
PositionBasedDynamicsWrapper/PBD_Simulator_GUI_TweakBar.cpp
)
set(GUI_HEADER_FILES
${PROJECT_SOURCE_DIR}/Simulator/GUI/TweakBar/Simulator_GUI_TweakBar.h
PositionBasedDynamicsWrapper/PBD_Simulator_GUI_TweakBar.h
)
source_group("Header Files\\GUI\\TweakBar" FILES ${GUI_HEADER_FILES})
source_group("Source Files\\GUI\\TweakBar" FILES ${GUI_SOURCE_FILES})
endif()
# 如果是Windows
if(WIN32)
# 设定要链接的OpenGL库,添加到 SIMULATION_LINK_LIBRARIES
set(SIMULATION_LINK_LIBRARIES opengl32.lib glu32.lib ${SIMULATION_LINK_LIBRARIES})
set(SIMULATION_DEPENDENCIES ${SIMULATION_DEPENDENCIES})
else()
set(OpenGL_GL_PREFERENCE GLVND)
find_package(OpenGL REQUIRED)
include_directories( ${OPENGL_INCLUDE_DIRS})
set(SIMULATION_LINK_LIBRARIES
${SIMULATION_LINK_LIBRARIES}
${OPENGL_LIBRARIES}
)
endif()
# 如果使用内嵌python
if (USE_EMBEDDED_PYTHON)
# 同样增加 要链接的 pysplishsplash_embed 库 到SIMULATION_LINK_LIBRARIES
set(SIMULATION_LINK_LIBRARIES pysplishsplash_embed ${SIMULATION_LINK_LIBRARIES})
# 并设置好依赖顺序
set(SIMULATION_DEPENDENCIES pysplishsplash_embed ${SIMULATION_DEPENDENCIES})
endif()
# 设置 PBDWRAPPER_SOURCE_FILES 指代PBDWrapper的源文件和头文件
set(PBDWRAPPER_SOURCE_FILES
PositionBasedDynamicsWrapper/PBDWrapper.cpp
PositionBasedDynamicsWrapper/PBDBoundarySimulator.cpp
)
set(PBDWRAPPER_HEADER_FILES
PositionBasedDynamicsWrapper/PBDWrapper.h
PositionBasedDynamicsWrapper/PBDRigidBody.h
PositionBasedDynamicsWrapper/PBDBoundarySimulator.h
)
# 设置 exporter的源文件和头文件
set(EXPORTER_SOURCE_FILES
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ParticleExporter_Partio.cpp
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ParticleExporter_VTK.cpp
${PROJECT_SOURCE_DIR}/Simulator/Exporter/RigidBodyExporter_BIN.cpp
${PROJECT_SOURCE_DIR}/Simulator/Exporter/RigidBodyExporter_OBJ.cpp
${PROJECT_SOURCE_DIR}/Simulator/Exporter/RigidBodyExporter_VTK.cpp
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ParticleExporter_xyz.cpp
)
set(EXPORTER_HEADER_FILES
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ExporterBase.h
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ParticleExporter_Partio.h
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ParticleExporter_VTK.h
${PROJECT_SOURCE_DIR}/Simulator/Exporter/RigidBodyExporter_BIN.h
${PROJECT_SOURCE_DIR}/Simulator/Exporter/RigidBodyExporter_OBJ.h
${PROJECT_SOURCE_DIR}/Simulator/Exporter/RigidBodyExporter_VTK.h
${PROJECT_SOURCE_DIR}/Simulator/Exporter/ParticleExporter_xyz.h
)
# 如果使用python,那么再加入ScriptObject.cpp
if (USE_EMBEDDED_PYTHON)
set(EMBEDDED_PYTHON_SOURCE_FILES
${PROJECT_SOURCE_DIR}/Simulator/ScriptObject.cpp
)
set(EMBEDDED_PYTHON_HEADER_FILES
${PROJECT_SOURCE_DIR}/Simulator/ScriptObject.h
)
endif(USE_EMBEDDED_PYTHON)
# IMPORTANT: 编译静态库 SimulatorBase
add_library(SimulatorBase
${PROJECT_SOURCE_DIR}/Simulator/ExporterRegistration.cpp
${PROJECT_SOURCE_DIR}/Simulator/SceneConfiguration.cpp
${PROJECT_SOURCE_DIR}/Simulator/SceneConfiguration.h
${PROJECT_SOURCE_DIR}/Simulator/SimulatorBase.cpp
${PROJECT_SOURCE_DIR}/Simulator/SimulatorBase.h
${PROJECT_SOURCE_DIR}/Simulator/BoundarySimulator.cpp
${PROJECT_SOURCE_DIR}/Simulator/BoundarySimulator.h
${PROJECT_SOURCE_DIR}/Simulator/StaticBoundarySimulator.cpp
${PROJECT_SOURCE_DIR}/Simulator/StaticBoundarySimulator.h
${PROJECT_SOURCE_DIR}/Simulator/GUI/OpenGL/Simulator_OpenGL.cpp
${PROJECT_SOURCE_DIR}/Simulator/GUI/OpenGL/Simulator_OpenGL.h
${PROJECT_SOURCE_DIR}/Simulator/GUI/Simulator_GUI_Base.h
${GUI_SOURCE_FILES}
${GUI_HEADER_FILES}
${VIS_FILES}
${GUI_FILES}
${EXPORTER_SOURCE_FILES}
${EXPORTER_HEADER_FILES}
${PBDWRAPPER_SOURCE_FILES}
${PBDWRAPPER_HEADER_FILES}
${EMBEDDED_PYTHON_SOURCE_FILES}
${EMBEDDED_PYTHON_HEADER_FILES}
)
if (NOT USE_IMGUI)
target_compile_definitions(SimulatorBase PRIVATE -DTW_NO_LIB_PRAGMA -DTW_STATIC)
endif()
if(DL_OUTPUT)
target_compile_definitions(SimulatorBase PUBLIC -DDL_OUTPUT)
endif()
# 设置 宏USE_IMGUI为PUBLIC传播
if (USE_IMGUI)
target_compile_definitions(SimulatorBase PUBLIC -DUSE_IMGUI)
endif()
set_target_properties(SimulatorBase PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
set_target_properties(SimulatorBase PROPERTIES RELWITHDEBINFO_POSTFIX ${CMAKE_RELWITHDEBINFO_POSTFIX})
set_target_properties(SimulatorBase PROPERTIES MINSIZEREL_POSTFIX ${CMAKE_MINSIZEREL_POSTFIX})
# 设置依赖关系
add_dependencies(SimulatorBase ${SIMULATION_DEPENDENCIES})
# IMPORTANT: 链接静态库
target_link_libraries(SimulatorBase PUBLIC ${SIMULATION_LINK_LIBRARIES})
VIS_SOURCE_GROUPS()
GUI_SOURCE_GROUPS()
# VS 分组
source_group("Header Files\\Exporter" FILES ${EXPORTER_HEADER_FILES})
source_group("Source Files\\Exporter" FILES ${EXPORTER_SOURCE_FILES})
source_group("Header Files\\PBD" FILES ${PBDWRAPPER_HEADER_FILES})
source_group("Source Files\\PBD" FILES ${PBDWRAPPER_SOURCE_FILES})
source_group("Header Files\\GUI\\OpenGL" FILES ${PROJECT_SOURCE_DIR}/Simulator/GUI/OpenGL/Simulator_OpenGL.h)
source_group("Source Files\\GUI\\OpenGL" FILES ${PROJECT_SOURCE_DIR}/Simulator/GUI/OpenGL/Simulator_OpenGL.cpp)
# IMPORTANT: 编译可执行文件 SPHSimulator.exe
add_executable(SPHSimulator main.cpp)
# IMPORTANT: 链接库 SimulatorBase
target_link_libraries(SPHSimulator SimulatorBase)
# 设置依赖顺序
add_dependencies(SPHSimulator SimulatorBase)
# 增加额外属性
set_target_properties(SPHSimulator PROPERTIES DEBUG_POSTFIX ${CMAKE_DEBUG_POSTFIX})
set_target_properties(SPHSimulator PROPERTIES RELWITHDEBINFO_POSTFIX ${CMAKE_RELWITHDEBINFO_POSTFIX})
set_target_properties(SPHSimulator PROPERTIES MINSIZEREL_POSTFIX ${CMAKE_MINSIZEREL_POSTFIX})
【SPlishsplash】Simulator\CMakeLists.txt设置详解
最新推荐文章于 2024-10-16 10:13:45 发布