【发布时间】:2017-12-08 03:43:42
【问题描述】:
所以我试图在 Windows 上使用 cmake 设置一个项目
这是我的项目结构的样子:
- 游戏引擎
- .git
- 构建
- 包括
- 来源
- 测试
- CMakeLists.txt
这个想法是“source”目录包含GameEngine库的所有.cpp文件,“include”目录包含所有头文件,“testing”目录用于测试库。所以它应该依赖于 GameEngine.dll 和 GameEngine.lib(在 windows 上)。
我的顶级 CMakesLists.txt 包含:
cmake_minimum_required(VERSION 2.7)
PROJECT( GameEngine )
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/include )
ADD_SUBDIRECTORY( source )
add_subdirectory( testing )
"source" 目录下的 CMakeLists.txt 包含:
project(GameEngineLib)
file(GLOB src "*.cpp" "../include/*.h")
add_library(${PROJECT_NAME} SHARED ${src})
而"testing"目录下的CMakeLists.txt包含:
project(Testing)
file(GLOB src "*.h" "*.cpp")
ADD_EXECUTABLE( ${PROJECT_NAME} ${src})
target_link_libraries(${PROJECT_NAME} GameEngineLib)
这一切都在 linux 上运行良好。
当我构建它时,我得到两个文件夹(+ 一些其他文件夹),“测试”和“源代码”以及一个输出可执行文件和 .so 文件的 Makefile。
并且可执行文件已经知道在哪里可以找到 .so 文件,所以我可以运行而不会出现任何错误。
当我使用 Visual Studio 在 Windows 上构建时,问题就来了。
一切正常,除了我在构建“ALL_BUILD”项目后得到的测试可执行文件给我一个错误,说它找不到 GameEngineLib.dll。
我试着在谷歌上搜索如何解决这个问题,但我发现的大多数解决方案只是说你必须在 Visual Studio 中手动更改设置,才能找到它所在的 dll。
但是如果我在一个有多个开发人员的团队中工作,我真的不希望每个使用 Visual Studio 的开发人员都必须自己进入并更改项目中的设置。
有没有办法告诉cmake自动将GameEngineLib.dll复制到Tester.exe的文件夹中?
【问题讨论】:
-
我使用的一个选项是从除顶层之外的所有项目中删除 project(),并在 add_subdirectory()s 之前的根 CMakeLists.txt 中设置输出文件夹
-
isn't there a way to tell cmake to automatically copy the GameEngineLib.dll to the Tester.exe's folder?- Stack Overflow 上有 many questions 关于使用 CMake 复制.dll。选择其中之一并继续。
标签: c++ visual-studio cmake cmake-gui