CMake VS针对不同配置的不同二进制文件

时间:2015-09-05 20:33:16

标签: c++ visual-studio visual-c++ cmake windows-store-apps

我很抱歉,如果这可能是一个愚蠢的问题,但我对CMake很新,我试图弄清楚如何做一些似乎不是很直接或真正记录的事情(直接至少...... )。

我正在尝试使用CMake创建跨平台GLES应用程序,我计划使用ANGLE(https://github.com/MSOpenTech/angle)以支持Windows应用商店和Windows Phone。我目前只是试图将模板提供的模板提供给CMake文件:

<AngleBinPath Condition=" '$(AngleBinPath)' == '' ">$(AngleRootPath)\winrt\8.1\windows\src\$(Configuration)_$(Platform)\</AngleBinPath>

稍后将按如下方式使用此变量以链接到库:

<Link>
  <AdditionalDependencies>$(AngleBinPath)lib\libGLESv2.lib;$(AngleBinPath)lib\libEGL.lib;%(AdditionalDependencies)</AdditionalDependencies>
...

然后最终复制DLL文件:

<ItemGroup Label="ANGLE">
    <None Include="$(AngleBinPath)libEGL.dll">
      <DeploymentContent>true</DeploymentContent>
    </None>
    <None Include="$(AngleBinPath)libGLESv2.dll">
      <DeploymentContent>true</DeploymentContent>
    </None>
</ItemGroup>

现在当然有大量有关如何使用CMake使用外部库的信息,但我找不到任何有关如何实现类似内容的信息,其中每个体系结构都有不同的二进制文件以及Debug和Release。我想这一定是一个常见的问题,但它让我难过。有什么想法吗?

PS。我想在CMake端有标志为每个配置生成不同的VS项目将作为最后的手段,但在正常情况下,只有一个项目可以做很多项目可能真的很痛苦。

1 个答案:

答案 0 :(得分:2)

从3.0版开始,CMake有generator-expressions,这对于像VS这样的多通道IDE的快速配置特定逻辑实际上是一件好事。

链接:

target_link_libraries(your_target
    ${AngleRootPath}\winrt\8.1\windows\src\$<CONFIG>_$<PLATFORM_ID>\lib\libGLESv2.lib)

安装:

install(FILES
    ${AngleRootPath}\winrt\8.1\windows\src\$<CONFIG>_$<PLATFORM_ID>\lib\libGLESv2.lib
    ...)