Visual Studio 2019 - CMake의 컴파일러를 기본 g++에서 clang++로 변경
Visual Studio의 CMake 프로젝트는 기본적으로 g++로 설정되어 있는데요. 이를 clang++로 바꾸는 방법을 검색해 보면 CMakefile.txt에서 다음과 같이 CMAKE_CXX_COMPILER 변수를 설정하면 된다고 합니다.
cmake_minimum_required(VERSION 3.9)
project (CorProfiler)
set (SRC_FILES ClassFactory.cpp CorProfiler.cpp dllmain.cpp ILRewriter.cpp)
set (ENV{BuildOS} Linux)
set (ENV{BuildArch} x64)
set (ENV{BuildType} Debug)
set (ENV{Output} CorProfiler.so)
SET (CMAKE_C_COMPILER=/usr/bin/clang)
SET (CMAKE_CXX_COMPILER=/usr/bin/clang++)
SET ( CMAKE_CXX_FLAGS_DEBUG "-Wno-undef -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11" )
SET ( CMAKE_CXX_FLAGS_RELEASE "-Wno-undef -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11" )
INCLUDE_DIRECTORIES ( ./cor/src/pal/inc/rt ./cor/src/pal/prebuilt/inc ./cor/src/pal/inc ./cor/src/inc )
add_library( CorProfiler.so SHARED ${SRC_FILES} )
그런데 실제로 해보면 Visual Studio의 경우 바뀌지 않습니다. 대신 비주얼 스튜디오에서 리눅스 환경으로 접근하기 위해 별도 관리하는 CMakeSettings.json에 해당 환경 변수를 설정하는 경우에는 동작을 합니다.
{
"configurations": [
{
"name": "Linux-Debug",
"generator": "Unix Makefiles",
"configurationType": "Debug",
"buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}",
"installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}",
"cmakeExecutable": "/usr/local/bin/cmake",
"remoteCopySourcesExclusionList": [ ".vs", ".git", "x64", "Debug" ],
"cmakeCommandArgs": "",
"buildCommandArgs": "",
"ctestCommandArgs": "",
"inheritEnvironments": [ "linux_x64" ],
"remoteMachineName": "409410665;192.168.100.50 (username=usr23, port=22, authentication=Password)",
"remoteCMakeListsRoot": "/var/tmp/src/${workspaceHash}/${name}",
"remoteBuildRoot": "/var/tmp/build/${workspaceHash}/build/${name}",
"remoteInstallRoot": "/var/tmp/build/${workspaceHash}/install/${name}",
"remoteCopySources": true,
"rsyncCommandArgs": "-t --delete --delete-excluded",
"remoteCopyBuildOutput": false,
"remoteCopySourcesMethod": "rsync",
"variables": [
{
"name": "CMAKE_CXX_COMPILER",
"value": "/usr/bin/clang++",
"type": "FILEPATH"
}
]
}
]
}
참고로, 빌드 시 경고가 다음과 같이 나올 때가 있습니다.
Warning the current #pragma pack aligment value is modified in the included file [-Wpragma-pack]
의미인즉, 현재 "-Wpragma-pack" 옵션이 적용된 상태에서는 저걸 경고로 취급해 메시지를 출력하는 것입니다. 따라서 저런 식의 경고 메시지를 없애고 싶다면 그냥 단순히 앞에 "no-"만 붙여주면 됩니다. 이런 식으로.
SET ( CMAKE_CXX_FLAGS_DEBUG " -Wno-pragma-pack -Wno-undef -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11" )
SET ( CMAKE_CXX_FLAGS_RELEASE " -Wno-pragma-pack -Wno-undef -Wno-invalid-noreturn -fPIC -fms-extensions -DBIT64 -DPAL_STDCPP_COMPAT -DPLATFORM_UNIX -std=c++11" )
[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]