CMAKE を介して vs2012 プロジェクトにリンカー フラグ "DEF" および "NODEFAULTLIB" を追加するにはどうすればよいですか?
2 に答える
それらを次の場所に追加できますCMAKE_EXE_LINKER_FLAGS
:
if(MSVC)
set(CMAKE_EXE_LINKER_FLAGS
"${CMAKE_EXE_LINKER_FLAGS} /DEF:my_defs.def /NODEFAULTLIB")
endif()
一般的な方法は、リンカー フラグを に追加すること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.def
CMAKE_EXPORT_ALL_SYMBOLS
CMAKE_SHARED_LINKER_FLAGS
も使えますCMAKE_CXX_STANDARD_LIBRARIES
。任意のリンカ フラグをチェックせずに追加しますが/DEF:<build_path>/exports.def
、後者がオーバーライドされないように、リンク コマンドの前にそれらを追加します。
このケースの完全な説明はこちら: https://cmake.org/pipermail/cmake-developers/2019-November/031274.html .