Looking for suggestions on how I might improve upon this cmake build

I am in the process of converting a visual studio project into cmake, and have gotten a working build. However, since I knew nothing of cmake before starting, and am still learning things, I was wondering if any of you kind souls might be interested in taking a look at my CMakeLists.txt file and providing feedback if there’s anything that sticks out as requiring attention or anything that could be simplified or changed.

Currently I’m using ExternalProject_Add and FetchContent_Declare for obtaining various source repositories, then installing each one to a directory within the _deps directory so that their library file and includes files are all located in one convenient location.

cmake_minimum_required(VERSION 3.16.0)

message("Build type: ${CMAKE_BUILD_TYPE}")

# Define our project name
set(PROJECT_NAME test)
project(${PROJECT_NAME})

if(MSVC)
	get_filename_component(_vs_bin_path "${CMAKE_LINKER}" DIRECTORY)
	set(libexe "${_vs_bin_path}/lib.exe")
endif()

# Make sure binary directory is not the same as source directory
if(PROJECT_SOURCE_DIR STREQUAL PROJECT_BINARY_DIR)
  message(
    FATAL_ERROR
      "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there."
  )
endif()


# This Project Depends on External Project(s) 
include(ExternalProject)
include(FetchContent)

# SETUP GLFW
set(libGLFW glfw)
ExternalProject_Add(${libGLFW}
PREFIX			${CMAKE_CURRENT_BINARY_DIR}/_deps/${libGLFW}
GIT_REPOSITORY  https://github.com/glfw/glfw.git
GIT_TAG         3.3.4
GIT_SHALLOW     ON
UPDATE_COMMAND 	""
CMAKE_ARGS      -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libGLFW}
				-DGLFW_BUILD_DOCS:BOOL=OFF
				-DGLFW_BUILD_EXAMPLES:BOOL=OFF
				-DGLFW_BUILD_TESTS:BOOL=OFF
)

set(GLFW_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libGLFW})
add_library(GLFW_LIBRARY STATIC IMPORTED)
set_target_properties(GLFW_LIBRARY PROPERTIES IMPORTED_LOCATION ${GLFW_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glfw3${CMAKE_STATIC_LIBRARY_SUFFIX})



# SETUP GLAD
set(libGLAD glad)
ExternalProject_Add(${libGLAD}
PREFIX			${CMAKE_CURRENT_BINARY_DIR}/_deps/${libGLAD}
GIT_REPOSITORY  https://github.com/Dav1dde/glad.git
GIT_TAG         origin/master
GIT_SHALLOW     ON
UPDATE_COMMAND 	""
CMAKE_ARGS      -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libGLAD}
				-DGLAD_INSTALL:BOOL=ON
				-DGLAD_PROFILE:STRING="core"
				-DGLAD_ALL_EXTENSIONS:BOOL=ON
				-DUSE_MSVC_RUNTIME_LIBRARY_DLL:BOOL=OFF
)

set(GLAD_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libGLAD})
add_library(GLAD_LIBRARY STATIC IMPORTED)
set_target_properties(GLAD_LIBRARY PROPERTIES IMPORTED_LOCATION ${GLAD_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}glad${CMAKE_STATIC_LIBRARY_SUFFIX})


# SETUP GLM
set(libGLM glm)
ExternalProject_Add(${libGLM}
PREFIX			${CMAKE_CURRENT_BINARY_DIR}/_deps/${libGLM}
GIT_REPOSITORY  https://github.com/g-truc/glm.git
GIT_TAG         origin/master
GIT_SHALLOW     ON
UPDATE_COMMAND 	""
CMAKE_ARGS      -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libGLM}
				-DBUILD_SHARED_LIBS:BOOL=OFF
				-DBUILD_STATIC_LIBS:BOOL=OFF
				-DGLM_TEST_ENABLE:BOOL=OFF
)

set(GLM_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libGLM})


# SETUP ASSIMP
set(libAssimp assimp)
ExternalProject_Add(${libAssimp}
PREFIX			${CMAKE_CURRENT_BINARY_DIR}/_deps/${libAssimp}
GIT_REPOSITORY  https://github.com/assimp/assimp.git
GIT_TAG         v5.0.1
GIT_SHALLOW     ON
UPDATE_COMMAND 	""
CMAKE_ARGS      -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libAssimp}
				-DASSIMP_BUILD_ALL_IMPORTERS_BY_DEFAULT:BOOL=OFF
				-DASSIMP_BUILD_ALL_EXPORTERS_BY_DEFAULT:BOOL=OFF
				-DBUILD_SHARED_LIBS:BOOL=OFF
				-DASSIMP_BUILD_ASSIMP_TOOLS:BOOL=OFF
				-DASSIMP_BUILD_TESTS:BOOL=OFF
				-DASSIMP_BUILD_FBX_IMPORTER:BOOL=ON
				-DASSIMP_BUILD_OBJ_IMPORTER:BOOL=ON
				-DASSIMP_BUILD_OBJ_EXPORTER:BOOL=ON
				-DASSIMP_BUILD_ZLIB:BOOL=ON
				-DASSIMP_LIBRARY_SUFFIX:STRING=
				-DLIBRARY_SUFFIX:STRING=
				-DCMAKE_DEBUG_POSTFIX:STRING=
				-DASSIMP_INJECT_DEBUG_POSTFIX:BOOL=OFF
)

set(ASSIMP_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libAssimp})
add_library(ASSIMP_LIBRARY STATIC IMPORTED)
set_target_properties(ASSIMP_LIBRARY PROPERTIES IMPORTED_LOCATION ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}assimp${CMAKE_STATIC_LIBRARY_SUFFIX})

add_library(IRRXML_LIBRARY STATIC IMPORTED)
set_target_properties(IRRXML_LIBRARY PROPERTIES IMPORTED_LOCATION ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}IrrXML${CMAKE_STATIC_LIBRARY_SUFFIX})

add_library(ZLIB_LIBRARY STATIC IMPORTED)
set_target_properties(
ZLIB_LIBRARY 
PROPERTIES 
	IMPORTED_LOCATION_RELEASE ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}
	IMPORTED_LOCATION_MINSIZEREL ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}
	IMPORTED_LOCATION_RELWITHDEBINFO ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstatic${CMAKE_STATIC_LIBRARY_SUFFIX}
	IMPORTED_LOCATION_DEBUG ${ASSIMP_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}zlibstaticd${CMAKE_STATIC_LIBRARY_SUFFIX}
)


# SETUP BULLET
set(libBullet bullet)
ExternalProject_Add(${libBullet}
PREFIX			${CMAKE_CURRENT_BINARY_DIR}/_deps/${libBullet}
GIT_REPOSITORY  https://github.com/bulletphysics/bullet3.git
GIT_TAG         3.17
GIT_SHALLOW     ON
UPDATE_COMMAND 	""
CMAKE_ARGS      -DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libBullet}
				-DINSTALL_LIBS:BOOL=ON
				-DBUILD_BULLET2_DEMOS:BOOL=OFF
				-DBUILD_BULLET3:BOOL=OFF
				-DBUILD_CLSOCKET:BOOL=OFF
				-DBUILD_CPU_DEMOS:BOOL=OFF
				-DBUILD_EGL:BOOL=OFF
				-DBUILD_ENET:BOOL=OFF
				-DBUILD_EXTRAS:BOOL=OFF
				-DBUILD_OPENGL3_DEMOS:BOOL=OFF
				-DBUILD_UNIT_TESTS:BOOL=OFF
				-DENABLE_VHACD:BOOL=OFF
				-DINSTALL_CMAKE_FILES:BOOL=OFF
				-DINSTALL_EXTRA_LIBS:BOOL=OFF
				-DUSE_GLUT:BOOL=OFF
				-DUSE_GRAPHICAL_BENCHMARK:BOOL=OFF
)


set(BULLET_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libBullet})

add_library(BULLET_COLLISION_LIBRARY STATIC IMPORTED)
add_library(BULLET_DYNAMICS_LIBRARY STATIC IMPORTED)
add_library(BULLET_INVERSE_DYNAMICS_LIBRARY STATIC IMPORTED)
add_library(BULLET_SOFT_BODY_LIBRARY STATIC IMPORTED)
add_library(LINEAR_MATH_LIBRARY STATIC IMPORTED)

if(MSVC)
	set_target_properties(
	BULLET_COLLISION_LIBRARY 
	PROPERTIES 
		IMPORTED_LOCATION_RELEASE ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_MINSIZEREL ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision_MinsizeRel${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_RELWITHDEBINFO ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision_RelWithDebInfo${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_DEBUG ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision_Debug${CMAKE_STATIC_LIBRARY_SUFFIX}
	)
	
	set_target_properties(
	BULLET_DYNAMICS_LIBRARY 
	PROPERTIES 
		IMPORTED_LOCATION_RELEASE ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_MINSIZEREL ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics_MinsizeRel${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_RELWITHDEBINFO ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics_RelWithDebInfo${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_DEBUG ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics_Debug${CMAKE_STATIC_LIBRARY_SUFFIX}
	)
	
	set_target_properties(
	BULLET_INVERSE_DYNAMICS_LIBRARY 
	PROPERTIES 
		IMPORTED_LOCATION_RELEASE ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletInverseDynamics${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_MINSIZEREL ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletInverseDynamics_MinsizeRel${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_RELWITHDEBINFO ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletInverseDynamics_RelWithDebInfo${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_DEBUG ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletInverseDynamics_Debug${CMAKE_STATIC_LIBRARY_SUFFIX}
	)
	
	set_target_properties(
	BULLET_SOFT_BODY_LIBRARY 
	PROPERTIES 
		IMPORTED_LOCATION_RELEASE ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletSoftBody${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_MINSIZEREL ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletSoftBody_MinsizeRel${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_RELWITHDEBINFO ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletSoftBody_RelWithDebInfo${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_DEBUG ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletSoftBody_Debug${CMAKE_STATIC_LIBRARY_SUFFIX}
	)
	
	set_target_properties(
	LINEAR_MATH_LIBRARY 
	PROPERTIES 
		IMPORTED_LOCATION_RELEASE ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_MINSIZEREL ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath_MinsizeRel${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_RELWITHDEBINFO ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath_RelWithDebInfo${CMAKE_STATIC_LIBRARY_SUFFIX}
		IMPORTED_LOCATION_DEBUG ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath_Debug${CMAKE_STATIC_LIBRARY_SUFFIX}
	)
	
else()
	set_target_properties(BULLET_COLLISION_LIBRARY PROPERTIES IMPORTED_LOCATION ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletCollision${CMAKE_STATIC_LIBRARY_SUFFIX})
	set_target_properties(BULLET_DYNAMICS_LIBRARY PROPERTIES IMPORTED_LOCATION ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletDynamics${CMAKE_STATIC_LIBRARY_SUFFIX})
	set_target_properties(BULLET_INVERSE_DYNAMICS_LIBRARY PROPERTIES IMPORTED_LOCATION ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletInverseDynamics${CMAKE_STATIC_LIBRARY_SUFFIX})
	set_target_properties(BULLET_SOFT_BODY_LIBRARY PROPERTIES IMPORTED_LOCATION ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}BulletSoftBody${CMAKE_STATIC_LIBRARY_SUFFIX})
	set_target_properties(LINEAR_MATH_LIBRARY PROPERTIES IMPORTED_LOCATION ${BULLET_INSTALL_DIR}/lib/${CMAKE_STATIC_LIBRARY_PREFIX}LinearMath${CMAKE_STATIC_LIBRARY_SUFFIX})
endif()




# SETUP ROBIN_HOOD
set(libRobinHood robin_hood)
FetchContent_Declare(${libRobinHood}
	GIT_REPOSITORY https://github.com/martinus/robin-hood-hashing.git
	GIT_TAG origin/master
	CONFIGURE_COMMAND ""
	BUILD_COMMAND ""
)

FetchContent_GetProperties(${libRobinHood})
if(NOT ${libRobinHood})
  FetchContent_Populate(${libRobinHood})
endif()

add_library(${libRobinHood} INTERFACE)

file(
COPY
	${${libRobinHood}_SOURCE_DIR}/src/include/robin_hood.h
DESTINATION
	${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libRobinHood}/include/${libRobinHood}
)

set(ROBINHOOD_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libRobinHood})


# SETUP JSON
set(libJson json)
FetchContent_Declare(${libJson}
	GIT_REPOSITORY https://github.com/nlohmann/json.git
	GIT_TAG origin/master
	CONFIGURE_COMMAND ""
	BUILD_COMMAND ""
)

FetchContent_GetProperties(${libJson})
if(NOT ${libJson})
  FetchContent_Populate(${libJson})
endif()

add_library(${libJson} INTERFACE)

file(
COPY
	${${libJson}_SOURCE_DIR}/include/nlohmann/json.hpp
DESTINATION
	${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libJson}/include/nlohmann
)

set(JSON_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libJson})


# SETUP STB_IMAGE
set(libStbImage stb_image)
FetchContent_Declare(${libStbImage}
	GIT_REPOSITORY https://github.com/nothings/stb.git
	GIT_TAG origin/master
	CONFIGURE_COMMAND ""
	BUILD_COMMAND ""
)

FetchContent_GetProperties(${libStbImage})
if(NOT ${libStbImage})
  FetchContent_Populate(${libStbImage})
endif()

add_library(${libStbImage} INTERFACE)

file(
COPY
	${${libStbImage}_SOURCE_DIR}/stb_image.h
DESTINATION
	${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libStbImage}/include/${libStbImage}
)

set(STBIMAGE_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libStbImage})


# SETUP PLF_COLONY
set(libPlfColony plf_colony)
FetchContent_Declare(${libPlfColony}
	GIT_REPOSITORY https://github.com/mattreecebentley/plf_colony.git
	GIT_TAG origin/master
	CONFIGURE_COMMAND ""
	BUILD_COMMAND ""
)

FetchContent_GetProperties(${libPlfColony})
if(NOT ${libPlfColony})
  FetchContent_Populate(${libPlfColony})
endif()

add_library(${libPlfColony} INTERFACE)

file(
COPY
	${${libPlfColony}_SOURCE_DIR}/plf_colony.h
DESTINATION
	${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libPlfColony}/include/${libPlfColony}
)

set(PLFCOLONY_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libPlfColony})




# SETUP IMGUI
set(libImGui imgui)
FetchContent_Declare(${libImGui}
	GIT_REPOSITORY https://github.com/ocornut/imgui.git
	GIT_TAG v1.84.1
	CONFIGURE_COMMAND ""
	BUILD_COMMAND ""
)

FetchContent_GetProperties(${libImGui})
if(NOT ${libImGui})
  FetchContent_Populate(${libImGui})
endif()

file(
COPY
	${${libImGui}_SOURCE_DIR}/imgui.cpp
	${${libImGui}_SOURCE_DIR}/imgui_draw.cpp
	${${libImGui}_SOURCE_DIR}/imgui_tables.cpp
	${${libImGui}_SOURCE_DIR}/imgui_widgets.cpp
	${${libImGui}_SOURCE_DIR}/backends/imgui_impl_glfw.cpp
	${${libImGui}_SOURCE_DIR}/backends/imgui_impl_opengl3.cpp
DESTINATION
	${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libImGui}/src
)

file(
COPY
	${${libImGui}_SOURCE_DIR}/imconfig.h
	${${libImGui}_SOURCE_DIR}/imgui.h
	${${libImGui}_SOURCE_DIR}/imgui_internal.h
	${${libImGui}_SOURCE_DIR}/imstb_rectpack.h
	${${libImGui}_SOURCE_DIR}/imstb_textedit.h
	${${libImGui}_SOURCE_DIR}/imstb_truetype.h
	${${libImGui}_SOURCE_DIR}/backends/imgui_impl_glfw.h
	${${libImGui}_SOURCE_DIR}/backends/imgui_impl_opengl3.h
	${${libImGui}_SOURCE_DIR}/backends/imgui_impl_opengl3_loader.h
DESTINATION
	${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libImGui}/include/${libImGui}
)

set(IMGUI_INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libImGui})

file(GLOB_RECURSE imgui_headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libImGui}/include/${libImGui}/*.h")
file(GLOB_RECURSE imgui_sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/_deps/installs/${libImGui}/src/*.cpp")
add_library(IMGUI_LIBRARY STATIC ${imgui_headers} ${imgui_sources})
add_dependencies(IMGUI_LIBRARY ${libGLFW})

set_target_properties(IMGUI_LIBRARY PROPERTIES
	ARCHIVE_OUTPUT_DIRECTORY ${IMGUI_INSTALL_DIR}/lib
)

target_include_directories(IMGUI_LIBRARY
	PUBLIC ${IMGUI_INSTALL_DIR}/include/${libImGui}
	PUBLIC ${GLFW_INSTALL_DIR}/include
)



# SETUP OUR LIBRARY
file(GLOB_RECURSE headers CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/inc/*.h")
file(GLOB_RECURSE sources CONFIGURE_DEPENDS "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")

add_library(${PROJECT_NAME} STATIC ${headers} ${sources})
add_dependencies(${PROJECT_NAME} ${libGLFW} ${libGLAD} ${libGLM} ${libAssimp} ${libBullet} ${libRobinHood} ${libJson} ${libStbImage} ${libPlfColony} IMGUI_LIBRARY)



# Add all include file paths
target_include_directories(${PROJECT_NAME}
	PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/inc
	PUBLIC ${GLFW_INSTALL_DIR}/include
	PUBLIC ${GLAD_INSTALL_DIR}/include
	PUBLIC ${GLM_INSTALL_DIR}/include
	PUBLIC ${ASSIMP_INSTALL_DIR}/include
	PUBLIC ${BULLET_INSTALL_DIR}/include
	PUBLIC ${JSON_INSTALL_DIR}/include 
	PUBLIC ${ROBIN_HOOD_INSTALL_DIR}/include
	PUBLIC ${STBIMAGE_INSTALL_DIR}/include
	PUBLIC ${PLFCOLONY_INSTALL_DIR}/include
	PUBLIC ${IMGUI_INSTALL_DIR}/include
)

# This SHOULD link the required libraries along with the project library if 
# down the road an executable is built and only links this project library
# (or at least that's what I read somewhere)
target_link_libraries(${PROJECT_NAME} PUBLIC
	GLFW_LIBRARY 
	GLAD_LIBRARY
	ASSIMP_LIBRARY
	IRRXML_LIBRARY
	ZLIB_LIBRARY
	BULLET_COLLISION_LIBRARY
	BULLET_DYNAMICS_LIBRARY
	BULLET_INVERSE_DYNAMICS_LIBRARY
	BULLET_SOFT_BODY_LIBRARY
	LINEAR_MATH_LIBRARY
	IMGUI_LIBRARY
)




# Create an EXPORT project that joins all libraries and exports their include files to
# buildpath/export so there is a singular location where someone can just build this project,
# go to the export directory, and grab the static library file and a singular directory containing
# the includes that they might need so they don't have to dig through a bunch of different directories
# and build seperate projects...etc. For the non-cmake inclinded individuals (ie myself before starting
# this process) who just want to get going as fast as possible without using cmake for their project.

# Also, this might make creating an install target easier? Although, if someone wants to install but use
# packages they have installed on their system (bullet/assimp/glfw/glad/etc) this would force them to use
# the dependency versions we downloaded and built...so maybe down the road set this up to use find_package()?
# IDK, because if we require a specific version of the library, but user has a different version and they 
# try to build with that then they will encounter issues and blame this library. I would think it would be
# better to encapsulate the specific dependency versions and package together as a standalone static library...
# but maybe I'm wrong...?
set(LIBNAME "${CMAKE_CURRENT_BINARY_DIR}/export/${CMAKE_STATIC_LIBRARY_PREFIX}${PROJECT_NAME}${CMAKE_STATIC_LIBRARY_SUFFIX}")

if(MSVC)
	add_custom_command(
		OUTPUT ${LIBNAME}
		COMMAND ${libexe} /OUT:${LIBNAME} $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE:GLFW_LIBRARY> $<TARGET_FILE:GLAD_LIBRARY> $<TARGET_FILE:ASSIMP_LIBRARY> $<TARGET_FILE:IRRXML_LIBRARY> $<TARGET_FILE:ZLIB_LIBRARY> $<TARGET_FILE:BULLET_COLLISION_LIBRARY> $<TARGET_FILE:BULLET_DYNAMICS_LIBRARY> $<TARGET_FILE:BULLET_INVERSE_DYNAMICS_LIBRARY> $<TARGET_FILE:BULLET_SOFT_BODY_LIBRARY> $<TARGET_FILE:LINEAR_MATH_LIBRARY> $<TARGET_FILE:IMGUI_LIBRARY>
		COMMAND xcopy /E /I \"${CMAKE_CURRENT_SOURCE_DIR}/inc\" \"${CMAKE_CURRENT_BINARY_DIR}/export/include\"
		COMMAND xcopy /E /I \"${GLM_INSTALL_DIR}/include\" \"${CMAKE_CURRENT_BINARY_DIR}/export/include\"
		COMMAND xcopy /E /I \"${IMGUI_INSTALL_DIR}/include\" \"${CMAKE_CURRENT_BINARY_DIR}/export/include\"
		DEPENDS GLFW_LIBRARY GLAD_LIBRARY ASSIMP_LIBRARY BULLET_COLLISION_LIBRARY BULLET_DYNAMICS_LIBRARY BULLET_INVERSE_DYNAMICS_LIBRARY BULLET_SOFT_BODY_LIBRARY LINEAR_MATH_LIBRARY IMGUI_LIBRARY ${PROJECT_NAME}
		COMMENT "Exporting ${PROJECT_NAME}..."
	)
elseif(UNIX)
	add_custom_command(
		OUTPUT ${LIBNAME}
		COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/export_lib.sh ${LIBNAME} $<TARGET_FILE:${PROJECT_NAME}> $<TARGET_FILE:GLFW_LIBRARY> $<TARGET_FILE:GLAD_LIBRARY> $<TARGET_FILE:ASSIMP_LIBRARY> $<TARGET_FILE:IRRXML_LIBRARY> $<TARGET_FILE:ZLIB_LIBRARY> $<TARGET_FILE:BULLET_COLLISION_LIBRARY> $<TARGET_FILE:BULLET_DYNAMICS_LIBRARY> $<TARGET_FILE:BULLET_INVERSE_DYNAMICS_LIBRARY> $<TARGET_FILE:BULLET_SOFT_BODY_LIBRARY> $<TARGET_FILE:LINEAR_MATH_LIBRARY> $<TARGET_FILE:IMGUI_LIBRARY>
		COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/export_include.sh ${CMAKE_CURRENT_BINARY_DIR}/export/include ${GLM_INSTALL_DIR}/include ${CMAKE_CURRENT_SOURCE_DIR}/inc ${BULLET_INSTALL_DIR}/include ${IMGUI_INSTALL_DIR}/include
		DEPENDS GLFW_LIBRARY GLAD_LIBRARY ASSIMP_LIBRARY BULLET_COLLISION_LIBRARY BULLET_DYNAMICS_LIBRARY BULLET_INVERSE_DYNAMICS_LIBRARY BULLET_SOFT_BODY_LIBRARY LINEAR_MATH_LIBRARY IMGUI_LIBRARY ${PROJECT_NAME}
		COMMENT "Exporting ${PROJECT_NAME}..."
	)
endif()



add_custom_target(EXPORT_LIB
    DEPENDS ${LIBNAME}
)

# might use in future
# add_library(combinedLib STATIC IMPORTED)
# set_property(TARGET combinedLib PROPERTY IMPORTED_LOCATION ${LIBNAME})
# add_dependencies(combinedLib EXPORT)