4

私はcmake(2.8.12.1)の初心者で、Windowsでそれを使用してプロジェクトファイルを生成し、Visual Studio 2012を使用してcpp-netlibを構築しています。

デフォルトでは、/MDd コンパイラ スイッチでコンパイルされます。/MTdを使うように変更したい。

https://stackoverflow.com/a/14172871のアドバイスに従いましたが、うまくいきません。

具体的には、CmakeLists.txt の if 文に以下の 2 行目を追加しました。

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()
4

1 に答える 1