c++ - CMake VS 不同配置的不同二进制文件

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

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

我正在尝试使用 CMake 创建一个跨平台的 GLES 应用程序,并且我计划使用 ANGLE (https://github.com/MSOpenTech/angle) 来支持 Windows Store 和 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 一起使用的信息,但我找不到任何关于我应该如何实现这样的东西的信息,因为每个体系结构都有不同的二进制文件以及调试和发布。我想这一定是一个常见问题,但它让我感到难过。有什么想法吗?

附言。我想在 CMake 端使用标志为每个配置生成不同的 VS 项目将作为最后的手段,但是当一个项目在正常情况下可以完成时,不得不拥有这么多项目可能真的很痛苦。

最佳答案

从 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
    ...)

关于c++ - CMake VS 不同配置的不同二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32417427/

相关文章:

c++ - 在 C++ 中将 memset 设置为 INT_MAX

c++ - typedef 如何用于函数指针

c++ - C++ 定义中的优先括号

c++ - Visual C++ 断言在返回位置中断

c++ - 如何在 Visual Studio 中安装 (v142) 构建工具

c++ - 如何转换普通 Makefile 以创建可在另一台计算机上使用的静态可执行文件

c# - 如何使用 C# 查找类或方法的用法?

visual-c++ - 我可以保存opencv_traincascade结果吗?

c++ - 我们应该在何时、何地以及为什么使用 "BigObject&& rv = std::move(big_obj);"?

visual-studio - Visual Studio 2015 RC 问题与包含