我是 cmake (2.8.12.1) 的新手,我在 Windows 上使用它来生成项目文件以使用 Visual Studio 2012 构建 cpp-netlib。
默认情况下,它使用 /MDd 编译器开关进行编译。我想更改它以使其使用 /MTd。
我遵循了这里给出的建议https://stackoverflow.com/a/14172871但它对我不起作用。
具体来说,我在 CmakeLists.txt 的 if 语句中添加了如下所示的第二行。
if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
endif()
当我打开 Visual Studio sln 文件时,我可以看到 /MDd 选项仍然设置。此外,我在 CMakeCache.txt 中看到以下内容:
//Flags used by the compiler during debug builds.
CMAKE_CXX_FLAGS_DEBUG:STRING=/D_DEBUG /MDd /Zi /Ob0 /Od /RTC1
我也尝试过像这样从头开始设置标志:
set(CMAKE_CXX_FLAGS_DEBUG "/MTd")
但这也不起作用。
如果我像这样通过命令行传递选项:
-DCMAKE_CXX_FLAGS_DEBUG="/MTd"
该选项已在 Visual Studio 项目中成功设置。
谁能告诉我我做错了什么?
如果有人能告诉我缓存中的值来自我未在命令行中指定或不在 CmakeLists.txt 中的值,我也将不胜感激。
按要求添加 CMakeList.txt。如果我没有做对,我以前从未发布过这样的道歉。
# Original from cpp-netlib.org with my edits
cmake_minimum_required(VERSION 2.8)
project(CPP-NETLIB)
set(Boost_USE_STATIC_LIBS ON)
set(Boost_USE_MULTI_THREADED ON)
find_package( Boost 1.45.0 REQUIRED unit_test_framework system regex date_time thread filesystem program_options chrono )
find_package( OpenSSL )
find_package( Threads )
set(CMAKE_VERBOSE_MAKEFILE true)
if (CMAKE_BUILD_TYPE MATCHES Debug)
add_definitions(-DBOOST_NETWORK_DEBUG)
endif()
if (OPENSSL_FOUND)
add_definitions(-DBOOST_NETWORK_ENABLE_HTTPS)
include_directories(${OPENSSL_INCLUDE_DIR})
endif()
if (${CMAKE_CXX_COMPILER_ID} MATCHES GNU)
set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall")
endif()
if (Boost_FOUND)
################# added #################
add_definitions(-DBOOST_ALL_NO_LIB)
#########################################
if (MSVC)
add_definitions(-D_SCL_SECURE_NO_WARNINGS)
endif(MSVC)
if (WIN32)
add_definitions(-D_WIN32_WINNT=0x0501)
endif(WIN32)
include_directories(${Boost_INCLUDE_DIRS})
enable_testing()
add_subdirectory(libs/network/src)
add_subdirectory(libs/network/test)
if (NOT MSVC)
add_subdirectory(libs/mime/test)
endif(NOT MSVC)
add_subdirectory(libs/network/example)
endif(Boost_FOUND)
if (MSVC)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj")
################# added #################
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} /MTd")
#########################################
endif()
enable_testing()