我正在开发游戏和单独的游戏引擎(静态库)。 游戏副本通过我在CMake中设置的预构建脚本包含游戏引擎项目和输出。
当我更改引擎中的代码并想要测试它时;我运行游戏项目。如果游戏项目不需要重新编译;来自引擎项目的新lib文件将永远不会被复制到游戏项目中(我已经在编译游戏项目之前设置了用于复制的预构建事件),因此在我运行游戏时不会进行更改。
这很麻烦,并且在调试多次时误导我,因此我希望每次启动游戏项目时都会复制lib文件,以确保它们始终是最新的。
我不想将引擎项目中的依赖项添加到游戏项目中,因此我无法在引擎项目中使用构建后脚本来执行此操作。
我还研究了通过VS中的Debugging-> Comand项目设置运行.bat文件,就像他们在这里建议的那样:How to run some script\excutable befure start debugging in VS2015?
这仅适用于发布版本,因为调试器在通过.bat文件启动时不会附加。
我尝试用于启动生成的.exe的批处理代码是:
start Absolute/Path/To/Generated/File.exe
call Absolute/Path/To/Generated/File.exe
Absolute/Path/To/Generated/File.exe
我提出的唯一完全可行的解决方案是通过我的游戏项目的源代码执行脚本。我希望在源代码之外做到这一点,因为我希望能够将我的CMake复制到一个新项目并且已经解决了所有问题。
编辑:由于我的用例似乎有些混乱,我会进一步解释。我希望可以将游戏和引擎彼此分开,因此,游戏项目存储库具有引擎项目的输出库的副本。由于以下情况的可能性,我无法通过指向游戏项目中的引擎项目输出目录来100%解决问题:
TL; DR:
每次通过Visual Studio启动项目时,我能以某种方式(通过Visual Studio或CMake)触发一堆文件的副本吗?
答案 0 :(得分:0)
将我的评论转化为答案
我能够重现您的问题,不幸的是,即使在cmd
这样的批处理文件(powershell
或Absolute/Path/To/Generated/File.exe
)中直接调用可执行文件也会创建一个新进程(这意味着您的调试器不会自动附加到这个新的/动态创建的进程。)
因此,没有简单的基于脚本的解决方案,允许在您开始调试(F5)"的时刻复制共享库依赖项。可执行文件。
这可以使用一些简单的测试代码进行测试(等到连接调试器然后触发断点):
<强>的main.cpp 强>
#include <Windows.h>
int main()
{
while (IsDebuggerPresent() == FALSE);
DebugBreak();
}
<强>的CMakeLists.txt 强>
cmake_minimum_required(VERSION 2.4)
project(HelloWorld)
add_executable(HelloWorld "main.cpp")
<强> start.ps1 强>
.\HelloWorld.exe
配置属性/调试(VS项目)
Command: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
Command Arguments: -ExecutionPolicy Bypass -File $(ProjectDir)\start.ps1
Working Directory: $(TargetDir)
现在您只能手动附加到新流程。我还尝试了以下powershell
脚本:
<强> start.ps1 强>
Start-Process -FilePath "HelloWorld.exe"
Debug-Process -Name "HelloWorld
但您仍需要选择要使用的调试器。可能ReAttach
Visual Studio extension可能有助于自动化流程,或者您可以从Attach Debugger to multiple processes via powershell作为基础开始,但我还没有尝试过。
我之前用过的两种简单方法,用于测试带有外部DLL的可执行文件(类似于您在问题中描述的方案):
将游戏项目的可执行输出路径设置为引擎项目的输出路径。因此,如果您开始调试,您将始终拥有最新的引擎库。
请参阅CMAKE_RUNTIME_OUTPUT_DIRECTORY
,也可以从cmake
命令行
> cmake -DCMAKE_RUNTIME_OUTPUT_DIRECTORY:PATH=....
将可执行文件的调试器Working Directory
设置为引擎项目的输出路径。
查看您的VS项目Configuration Properties / Debugging
或者从CMake VS_DEBUGGER_WORKING_DIRECTORY
目标属性
问题还在于您需要将库的(预)构建文件复制或部署到可执行文件中吗?
问题是您需要为&#34;平台+编译器+架构+配置&#34; 提供库,以便可以使用CMake为其生成构建环境。
并且您至少还需要提供头文件(如果接口契约不是库本身的一部分,例如托管代码)。如果然后添加程序数据库.pdb
文件,则还需要源文件能够调试到库中。这将总结为您完整的git包。
一般情况下,我建议您阅读cmake-packages
from CMake's doku,例如请查看"Code Review: Basic CMake C++ project structure"或Making cmake library accessible by other cmake packages automatically