Создайте файл карты с помощью CMAKE_CXX_FLAGS и MSVC14 - PullRequest
1 голос
/ 28 мая 2020

Я пытаюсь создать файл карты с помощью CMake (Clion)

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]

Но файл file.map не создается, даже если CMAKE_CXX_FLAGS содержит флаг.

1 Ответ

0 голосов
/ 28 мая 2020

Файл карты создается компоновщиком и обычно отключен по умолчанию . Чтобы включить создание файла карты, должна быть предоставлена ​​опция компоновщика /MAP. Когда я тестировал с /MAP, флаг компилятора /Fm, определяющий имя пути к файлу карты, был проигнорирован, и файл карты был создан с именем по умолчанию рядом с двоичным файлом.

Однако вы также можете указать имя файла карты, добавив его к параметру компоновщика /MAP. В CMake вы можете указать параметры ссылки для конкретной цели c, используя target_link_options:

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