我正在尝试在Windows上使用CMake设置一个项目。
这是我的项目结构:
- GameEngine
- .git
- build
- include
- source
- testing
- CMakeLists.txt
想法是"source"目录包含GameEngine库的所有.cpp文件,"include"目录包含所有头文件,而"testing"目录用于测试库。因此,它应该依赖于GameEngine.dll和GameEngine.lib(在Windows上)。
我的顶层CMakeLists.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系统上一切正常。构建后,会得到两个文件夹(加上其他一些文件),"testing"和"source",以及一个Makefile,该文件可以输出一个可执行文件和一个.so文件。而且,可执行文件已经知道在哪里找到.so文件,所以我可以直接运行而不会出现任何错误。
问题出现在使用Visual Studio在Windows上进行构建时。除了Testing可执行文件之外,一切都正常。构建"All_Build"项目后,Testing可执行文件会报错,提示找不到GameEngineLib.dll。
我试图在Google上搜索如何解决这个问题,但大多数解决方案都说你必须手动更改Visual Studio中的设置,以查找dll文件的位置。
但是,如果我与多个开发人员合作,我不希望每个使用Visual Studio的开发人员都必须进入项目并更改设置。
难道没有一种方法可以告诉CMake自动将GameEngineLib.dll复制到Tester.exe的文件夹中吗?