Visual studio CMake中的Visual Studio项目引用

Visual studio CMake中的Visual Studio项目引用,visual-studio,cmake,Visual Studio,Cmake,首先我想说的是,这不是一个复制品 我在互联网上看了看,看不到CMake中Visual Studio项目引用的地图。我找到了这一页,但没有参考资料。这是我的文件夹配置: - CMakeLists.txt - demo/ ----CMakeLists.txt - engine/ ----CMakeLists.txt - bin/ ----[config]/ ------[target_name] 演示项目是一个dll,引擎项目是一个exe,我想在dll中添加引擎作为引用,因此当我编译dll时,如果

首先我想说的是,这不是一个复制品

我在互联网上看了看,看不到CMake中Visual Studio项目引用的地图。我找到了这一页,但没有参考资料。这是我的文件夹配置:

- CMakeLists.txt
- demo/
----CMakeLists.txt
- engine/
----CMakeLists.txt
- bin/
----[config]/
------[target_name]
演示项目是一个dll,引擎项目是一个exe,我想在dll中添加引擎作为引用,因此当我编译dll时,如果进行了更改,它会编译exe

Main CMakeLists.txt

演示CMakeLists

发动机凸轮轴

cmake_最低要求(3.1版)
设置(目标名称“llamathrust”)
#设置输出目录
设置(CMAKE_存档_输出_目录“${CMAKE_当前_源_目录}/./bin/${TARGET_NAME}”)
设置(CMAKE_库_输出_目录“${CMAKE_当前_源_目录}/./bin/${TARGET_名称}”)
设置(CMAKE_运行时_输出_目录“${CMAKE_当前_源_目录}/./bin/${TARGET_名称}”)
#设定来源
套件(Llamathrust\U SRC
...
)
查找_包(需要OpenGL)
#可执行文件名
添加可执行文件(${TARGET\u NAME}${Llamathrust\u SRC})
#设置过滤器
foreach(_sourcein ITEMS${Llamathrust_SRC})
#获取源文件的目录
获取\u文件名\u组件(\u源\u路径“${u源}”路径)
#确保我们使用的是windows斜杠
字符串(替换“/”\\“\u组\u路径“${\u源\u路径}”)
source\U group(“${U group\U path}”文件“${U source}”)
endforeach()
#查找并链接到opengl
目标链接库(${target\u NAME}${OPENGL\u LIBRARY})
目标目录(${target\u NAME}PRIVATE“${OPENGL\u include\u DIR}”)
集合(LIBS XInput)
目标链接库(${target\u NAME}${LIBS})
#将include目录设置为自身
目标目录(${target\u NAME}PUBLIC“${CMAKE\u CURRENT\u SOURCE\u DIR}”)
#目标名称标签
设置\u目标\u属性(${target\u NAME}属性项目\u标签${target\u NAME})
#预处理器定义
#调试
set_属性(TARGET${TARGET_NAME}APPEND属性
编译定义($)
set_属性(TARGET${TARGET_NAME}APPEND属性
编译定义($)
#释放断言
set_属性(TARGET${TARGET_NAME}APPEND属性
编译定义($)
set_属性(TARGET${TARGET_NAME}APPEND属性
编译定义($)
#释放
set_属性(TARGET${TARGET_NAME}APPEND属性
编译定义($)

提前谢谢

这太尴尬了,我刚刚自己找到了答案,看起来像是依赖。 答案是添加依赖项(“demo”“llamathrust”) 我将保留这个问题,因为VisualStudio开发人员很容易找到答案,但最终版主有最终决定权

cmake_minimum_required(VERSION 3.1)

cmake_policy(SET "CMP0079"  NEW)

# set configuration types and make them advanced option on cmake.
mark_as_advanced(CMAKE_INSTALL_PREFIX)
set(CMAKE_CONFIGURATION_TYPES Release Debug Release_Asserts)
set(CMAKE_CXX_FLAGS_RELEASE_ASSERTS ${CMAKE_CXX_FLAGS_RELEASE})
set(CMAKE_SHARED_LINKER_FLAGS_RELEASE_ASSERTS ${CMAKE_SHARED_LINKER_FLAGS_RELEASE})

# set c++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# set the project/solution name
project("Llamathrust Engine"
        VERSION 1.0
        DESCRIPTION "Game engine Win32"
        LANGUAGES C CXX)
# use folders for ZERO_CHECK and BUILD_ALL
set_property(GLOBAL PROPERTY USE_FOLDERS ON)

# add glad library
add_subdirectory("${CMAKE_SOURCE_DIR}/external/glad")

# add glm library
add_subdirectory("${CMAKE_SOURCE_DIR}/external/glm")

# add the engine to the solution
add_subdirectory("${CMAKE_SOURCE_DIR}/llamathrust/")
target_include_directories("llamathrust" PRIVATE "${CMAKE_SOURCE_DIR}/external/opengl/include")
set_property(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT llamathrust)

# link llamathrust to GLAD
target_link_libraries("llamathrust" "glad")
# link llamathrust to GLM
target_link_libraries("llamathrust" "glm")
target_include_directories("llamathrust" PUBLIC "${CMAKE_SOURCE_DIR}/external/glm")

# add the demo code to the solution
add_subdirectory("${CMAKE_SOURCE_DIR}/demo/")

# link demo and llamathrust
# link llamathrust to GLM
target_link_libraries("demo" "glm")
target_include_directories("demo" PUBLIC "${CMAKE_SOURCE_DIR}/external/glm")
# remove ...
remove_definitions(/CMAKE_INTDIR)

# adding options

# option to include a blank screen game
#if (BLANK_TARGET)
#endif()

# option to include the demo game
#if (DEMO_TARGET)
#add_subdirectory("${CMAKE_SOURCE_DIR}/demo/")
#endif()
cmake_minimum_required(VERSION 3.10)

# set the target/project name
set(TARGET_NAME "demo")

# set c++ standard
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED True)

# set output directories
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/${TARGET_NAME}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/${TARGET_NAME}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/${TARGET_NAME}")

# add preprocessor definitions
add_definitions(-DLT_DYNAMIC_LIB)

# set sources
set(Demo_SRC
main/main_local.hpp
main/main_local.cpp
main/local_imports.hpp
platform/main.cpp
games/game_demo.hpp
games/game_demo.cpp
)

# executable name
add_library(${TARGET_NAME} SHARED ${Demo_SRC})

# set filters
foreach(_source IN ITEMS ${Demo_SRC})
# Get the directory of the source file
get_filename_component(_source_path "${_source}" PATH)

# Make sure we are using windows slashes
string(REPLACE "/" "\\" _group_path "${_source_path}")

source_group("${_group_path}" FILES "${_source}")
endforeach()

set_target_properties(${TARGET_NAME} PROPERTIES PROJECT_LABEL ${TARGET_NAME})
set_target_properties(${TARGET_NAME} PROPERTIES LINKER_LANGUAGE CXX)

# set include directory to itself
target_include_directories(${TARGET_NAME} PRIVATE "${CMAKE_CURRENT_SOURCE_DIR}")
target_include_directories(${TARGET_NAME} PUBLIC  "${CMAKE_SOURCE_DIR}/llamathrust/include")

# make a reference to the engine
cmake_minimum_required(VERSION 3.1)

set(TARGET_NAME "llamathrust")

# set output directories
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/${TARGET_NAME}")
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/${TARGET_NAME}")
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/../bin/${TARGET_NAME}")

# set sources
set(Llamathrust_SRC
...
)
find_package(OpenGL REQUIRED)

# executable name
add_executable(${TARGET_NAME} ${Llamathrust_SRC})

# set filters
foreach(_source IN ITEMS ${Llamathrust_SRC})
# Get the directory of the source file
get_filename_component(_source_path "${_source}" PATH)

# Make sure we are using windows slashes
string(REPLACE "/" "\\" _group_path "${_source_path}")

source_group("${_group_path}" FILES "${_source}")
endforeach()

# find and link to opengl
target_link_libraries(${TARGET_NAME} ${OPENGL_LIBRARY})
target_include_directories(${TARGET_NAME} PRIVATE "${OPENGL_INCLUDE_DIR}")

set(LIBS XInput)
target_link_libraries(${TARGET_NAME} ${LIBS})

# set include directory to itself
target_include_directories(${TARGET_NAME} PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}")

# target name label
set_target_properties(${TARGET_NAME} PROPERTIES PROJECT_LABEL ${TARGET_NAME})



#preprocessor definitions
# DEBUG
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
  COMPILE_DEFINITIONS $<$<CONFIG:Debug>:LT_DEBUG>)
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
  COMPILE_DEFINITIONS $<$<CONFIG:Debug>:LT_ENABLE_ASSERTS>)
#RELEASE_ASSERT
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
  COMPILE_DEFINITIONS $<$<CONFIG:Release_Asserts>:LT_RELEASE>)
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
  COMPILE_DEFINITIONS $<$<CONFIG:Release_Asserts>:LT_ENABLE_ASSERTS>)
#RELEASE
set_property(TARGET ${TARGET_NAME} APPEND PROPERTY
  COMPILE_DEFINITIONS $<$<CONFIG:Release>:LT_RELEASE>)