具有CMake和静态库/ Z7标志的Visual Studio

时间:2018-12-19 02:27:03

标签: c++ cmake visual-studio-2017 protocol-buffers

我正在尝试使用Visual Studio 2017和基于CMake的项目(以及默认的Ninja后端)构建静态库(特别是Protobuf)。

我想在构建时传递/Z7编译器开关(或更准确地说,将默认/Zi替换为/Z7),以便最终将调试信息嵌入{{ 1}}文件,而不是创建单独的.lib文件。

我对CMake完全一无所知(但是我确实有一个可行的版本)。我该怎么做?

最好,如果可能的话,只使用对VS创建的.pdb文件的更改,而不对上游CMakeSettings.json文件进行任何更改。

如果这不可能,那么采用某种方法来制作一个新的CMakeLists.txt文件,该文件会继承未修改的上游文件中的所有内容,但会覆盖此设置。

我当前的CMakeLists.txt文件同时指定了CMakeSettings.jsonDebug的配置。

1 个答案:

答案 0 :(得分:1)

经过一番尝试(并受到this question的启发),这似乎是添加新CMakeLists.txt文件的第二个(不太受欢迎的)解决方案:

cmake_minimum_required(VERSION 3.1.3)
project(protobuf C CXX)

string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG}")
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
string(REPLACE "/Zi" "/Z7" CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS_RELWITHDEBINFO}")
string(REPLACE "/Zi" "/Z7" CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO}")

add_subdirectory(../cmake cmake)

如果有人有,我仍然对更清洁的解决方案感兴趣。