我正在尝试通过一个简单的项目学习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)标志。 为什么默认标志仍然存在,我如何确保编译器确实使用了我指定的标志?
;
代替空格来使其成为选项列表(否则它会被引用并解释为单个命令行选项)。所以在你的情况下,应该使用$<$<CONFIG:Debug>:/EHa;/MTd;/W3;/w14640>
。 - Floriantarget_compile_options
。但是当我使用target_compile_options
时,我注意到标志没有被替换,而只是被添加了,我在使用ninja时会收到警告,如这里所述。然而,当我使用add_compile_options
时,我没有收到任何警告,因为这个命令似乎更加智能,实际上是替换而不是添加。你建议使用哪一个? - Ali