我有一个项目正在使用CMake
和Visual Studio
来构建。
.exe
文件需要2个dll文件(我现在将其复制到Debug forlder)。
是否可以通过 CMakeLists.txt
/ FindLibrary.cmake
添加 dlls / dlls目录
(使用find_library来找到*.lib
的方式或我忽略的其他方式),以便我不要复制它们每次我在另一个文件夹/个人电脑中生成项目时,手动 内部 调试 文件夹(因为知道dll的文件夹)?
CMakeLists.txt
..
..
set (ENVLIB $ENV{MYLIB})
FUNCTION (CONFIGURE_DEBUGGER TARGET_NAME)
CONFIGURE_FILE(common/build/template/Main.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.vcxproj.user
@ONLY
)
ENDFUNCTION (CONFIGURE_DEBUGGER)
..
..
ADD_EXECUTABLE(Main Main.cxx)
CONFIGURE_DEBUGGER(Main)
Main.vcxproj.user
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerCommandArguments>-D20</LocalDebuggerCommandArguments>
<LocalDebuggerEnvironment>PATH=@ENVLIB@bin;$(Path)
$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<!-- Additional PropertyGroups for the rest of Configuration/Platform combos -->
</Project>
生成后vcxproj.user的输出
<LocalDebuggerEnvironment>PATH=C:\Program Files\MyLib\bin;$(Path)
复制文件后,变量ENVLIB
已更改为正确的PATH,但
Visual Studio仍在请求这些DLL。就像忽略了文件.vcxproj.user
已解决,将属性:<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
更改为
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
答案 0 :(得分:1)
第一个选择是创建一个自定义目标,该目标将运行CMake脚本来复制文件。
第二个选项(我更喜欢)是使用CONFIGURE_FILE
生成一个.vcxproj.user
文件,该文件设置了LocalDebuggerEnvironment
,以便将带有DLL的目录添加到PATH。
例如,我的构建系统定义了一个函数CONFIGURE_DEBUGGER
:
FUNCTION(CONFIGURE_DEBUGGER TARGET_NAME)
CONFIGURE_FILE(${ROOT}/common/build/template/executable_vs14.vcxproj.user
${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}.vcxproj.user
@ONLY
)
ENDFUNCTION(CONFIGURE_DEBUGGER)
我在定义可执行目标后立即调用此函数,例如
ADD_EXECUTABLE(example
${EXAMPLE__SRC}
${EXAMPLE__HDR}
)
CONFIGURE_DEBUGGER(example)
模板executable_vs14.vcxproj.user
如下所示:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LocalDebuggerCommandArguments>-D20</LocalDebuggerCommandArguments>
<LocalDebuggerWorkingDirectory>$(TargetDir)\..\..\common\</LocalDebuggerWorkingDirectory>
<LocalDebuggerEnvironment>PATH=$(SolutionDir)..\deps\bin;$(Path)
$(LocalDebuggerEnvironment)</LocalDebuggerEnvironment>
<DebuggerFlavor>WindowsLocalDebugger</DebuggerFlavor>
</PropertyGroup>
<!-- Additional PropertyGroups for the rest of Configuration/Platform combos -->
</Project>
注意:在上面的示例中,我还设置了一些默认命令参数,以便在调试时运行应用程序以及运行该应用程序的工作目录-根据需要进行调整。
注2:现在,我正在研究它,也许我们可以更改Condition
上的PropertyGroup
使其适用于所有配置/平台。要调查一下。