使用 CMAKE_CXX_FLAGS 和 MSVC14 生成映射文件

Produce mapfile with CMAKE_CXX_FLAGS and MSVC14

我正在尝试使用 CMake (Clion) 生成 Mapfile

cmake_minimum_required(VERSION 3.13)
project(cmake_testapp)
set(CMAKE_CXX_STANDARD 14)
MESSAGE("TEST_HELLO")
set(MSVC_COVERAGE_COMPILE_FLAGS "/Fm${PROJECT_SOURCE_DIR}/file.map")

set(CMAKE_CXX_FLAGS "${MSVC_COVERAGE_COMPILE_FLAGS} ${CMAKE_CXX_FLAGS}" )
MESSAGE(${CMAKE_CXX_FLAGS})
MESSAGE(${CMAKE_CXX_COMPILER})
add_executable(cmake_testapp loaderstack.cpp)

输出:

"C:\Program Files\JetBrains\CLion 2020.1.1\bin\cmake\win\bin\cmake.exe" -DCMAKE_BUILD_TYPE=Debug -G "CodeBlocks - NMake Makefiles" C:\Users\remi\Desktop\OK
TEST_HELLO
/FmC:/Users/remi/Desktop/OK/file.map /DWIN32 /D_WINDOWS /W3 /GR /EHsc
C:/Program Files (x86)/Microsoft Visual Studio/2019/BuildTools/VC/Tools/MSVC/14.26.28801/bin/Hostx86/x86/cl.exe
-- Configuring done
-- Generating done
-- Build files have been written to: C:/Users/remi/Desktop/OK/cmake-build-debug

[Finished]

但即使 CMAKE_CXX_FLAGS 包含标志,也不会生成 file.map。

映射文件由 linker 生成,通常 默认禁用。要启用映射文件的生成,必须提供 /MAP linker 选项。当我使用 /MAP 进行测试时,指定映射文件路径名的编译器标志 /Fm 被忽略,生成的映射文件在二进制文件旁边使用默认名称。

但是,您也可以通过将地图文件名附加到 /MAP linker 选项来指定地图文件名。在 CMake 中,您可以使用 target_link_options:

为特定目标指定 link 选项
cmake_minimum_required(VERSION 3.13)
project(cmake_testapp)
set(CMAKE_CXX_STANDARD 14)
MESSAGE("TEST_HELLO")

MESSAGE(${CMAKE_CXX_COMPILER})
add_executable(cmake_testapp loaderstack.cpp)

# Set the coverage flags for the cmake_testapp executable only.
target_link_options(cmake_testapp PRIVATE "/MAP:${PROJECT_SOURCE_DIR}/file.map")