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.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 .