我试图通过一个简单的项目学习CMake。这是我的示例CMakeLists.txt
cmake_minimum_required(VERSION 3.11 FATAL_ERROR)
set(PROJECT_NAME "MyLib" CXX)
set(CMAKE_CXX_STANDARD 11)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)
project(${PROJECT_NAME})
include(${CMAKE_SOURCE_DIR}/Sources.cmake)
set(SOURCE_FILES ${COMMON_CPP_FILES} ${COMMON_H_FILES})
include_directories(include)
add_compile_options("$<$<CONFIG:Debug>:/EHa /MTd /W3 /w14640>")
add_library(${PROJECT_NAME} STATIC ${SOURCE_FILES})
我试图基于此文件创建Visual Studio项目,但是我不知道如何正确设置编译标志。当我打开Visual Studio时,可以在“其他选项”中看到这些标记(/ EHa),但是仍然可以看到默认的(/ EHsc)标志。
为什么默认标志仍然存在,如何确保编译器确实使用了我指定的标志?
答案 0 :(得分:1)
您可以通过打印CMAKE_CXX_FLAGS和CMAKE_CXX_FLAGS_ {RELEASE | DEBUG}来检查CMake使用的默认标志。 用类似
的方式设置这些变量set(CMAKE_CXX_FLAGS "")
但是不会清除它们。
我发现做您在说的话(清除特定的默认标志)的唯一方法是对每个默认标志进行如下操作:
string(REPLACE "/EHsc" "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
string(REPLACE "/RTC1" "" CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG}")
但是,为什么不能轻松清除所有默认标志,并且没有这种语法,这是我无法解决的。