相关疑难解决方法(0)

在跨平台cmake项目中设置编译器标志的现代方法

我想编写一个cmake文件,在调试和发布版本中为clang ++,g ++和MSVC设置不同的编译器选项.我目前正在做的事情看起来像这样:

if(MSVC)
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++latest /W4")
    # Default debug flags are OK 
    set(CMAKE_CXX_FLAGS_RELEASE "{CMAKE_CXX_FLAGS_RELEASE} /O2")
else()
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++1z -Wall -Wextra -Werror")
    set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} some other flags")
    set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")

    if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
        set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++")
    else()
        # nothing special for gcc at the moment
    endif()
endif()
Run Code Online (Sandbox Code Playgroud)

但我有几个问题:

  1. 首先简单:有没有像relly澳鹏,让我来代替没有命令set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} Foo")append(CMAKE_CXX_FLAGS "Foo")
  2. 我已多次阅读,一个人不应该首先手动设置CMAKE_CXX_FLAGS和类似的变量,但我不知道使用什么其他机制.
  3. 最重要的是:我在这里的方式,我需要为每个编译器和配置单独的构建目录理想情况下,我想将其转换为同一目录中的多个目标,以便我可以调用make foo_debug_clang.

所以我的问题是

  • a)有没有更好的方法来编写解决我的"痛点"的cmake脚本?解决上述问题?
  • b)是否有类似于如何建立此类项目的现代最佳实践?

我在互联网上找到的大多数参考资料要么过时,要么只显示一些简单的例子.我目前正在使用cmake3.8,但如果这有什么不同,我对更新版本的答案更感兴趣.

c++ cmake

31
推荐指数
2
解决办法
1万
查看次数

CMake Generator for Visual Studio Linux跨平台

我想从CMake项目为跨平台Linux项目生成Visual Studio解决方案.

Visual Studio 2017跨平台工作负载运行良好,特别是在调试方面.我用它来定位WSL.现在我有一个现有的Linux CMake项目,我想在Windows和Visual Studio上开发并在WSL上构建它.我似乎没有看到为Visual Studio生成适当的解决方案的方法.任何人都可以开导我吗?

c++ cross-platform cmake visual-studio windows-subsystem-for-linux

7
推荐指数
1
解决办法
2949
查看次数

cmake 如何在项目的 vcxproj PropertyGroup 中添加自定义条目?

我正在使用 cmake 生成多平台 C++ 项目的 Windows/VisualStudio 解决方案。

在项目的属性中有一个特定的条目(文件夹数据的简单路径),我希望 cmake 为我填写。此条目是由我无法修改的外部插件添加的。

填写 VS 项目属性中的选项会在MyAppExecutable.vcxproj文件中添加以下条目:

<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|PLATFORM'">
  <AppDataFolder>D:\myappdata</AppDataFolder>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

我希望 cmakeAppDataFolder为我添加这个值。

它甚至会更好,如果它可以同时为所有可能的设置PLATFORM,以及是否在编译ReleaseDebug或任何其他。希望将其添加到内部<PropertyGroup Label="Globals">可以实现这一目标?

有没有办法让 cmake 在项目文件中设置这个值?

c++ cmake visual-studio visual-c++

1
推荐指数
1
解决办法
1950
查看次数