7

CMAKE を介して vs2012 プロジェクトにリンカー フラグ "DEF" および "NODEFAULTLIB" を追加するにはどうすればよいですか?

4

2 に答える 2

12

それらを次の場所に追加できますCMAKE_EXE_LINKER_FLAGS:

if(MSVC)
  set(CMAKE_EXE_LINKER_FLAGS
      "${CMAKE_EXE_LINKER_FLAGS} /DEF:my_defs.def /NODEFAULTLIB")
endif()
于 2013-09-13T18:45:04.993 に答える
2

一般的な方法は、リンカー フラグを に追加することCMAKE_xxx_LINKER_FLAGSです。はい。ただし、パラメータの場合CMAKE_SHARED_LINKER_FLAGS/DEF:特殊なケースがあり、問題が発生しました。

すでにCMAKE_EXPORT_ALL_SYMBOLS( CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS) を使用/DEF:している場合、 で指定した場合でも、パラメータはリンク コマンドに表示されませんCMAKE_SHARED_LINKER_FLAGS

これは、MSVC リンカーが 1 つのパラメーターのみを受け入れ、CMake が既存のパラメーター( により追加されたもの) を で指定した/DEF:パラメーターでオーバーライドしたくないためです。/DEF:<build_path>/exports.defCMAKE_EXPORT_ALL_SYMBOLSCMAKE_SHARED_LINKER_FLAGS

も使えますCMAKE_CXX_STANDARD_LIBRARIES。任意のリンカ フラグをチェックせずに追加しますが/DEF:<build_path>/exports.def、後者がオーバーライドされないように、リンク コマンドの前にそれらを追加します。

このケースの完全な説明はこちら: https://cmake.org/pipermail/cmake-developers/2019-November/031274.html .

于 2019-11-11T12:57:05.093 に答える