目標は3つ。1 つは静的ライブラリ、1 つは共有ライブラリ、もう 1 つはプログラムです。ターゲット固有のリンカー フラグを共有ライブラリとプログラムに追加しようとしています。
必要なフラグを追加しようとすると、次のようになります。
if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
CRYPTOPP_XARCH_OPTIONS = "-xarch=ssse3 -xarch=sse4_1 ..."
endif()
...
if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
set_target_properties(cryptest-program PROPERTIES LINK_FLAGS APPEND "-M cryptest.mapfile")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/cryptest.mapfile DESTINATION ${PROJECT_BINARY_DIR})
set_target_properties(cryptest-program PROPERTIES LINK_FLAGS APPEND ${CRYPTOPP_XARCH_OPTIONS})
endif ()
失敗します。
CMake Error at CMakeLists.txt:631 (set_target_properties):
set_target_properties called with incorrect number of arguments.
X = ${X} Y
が欠落しているために構文を使用しようとすると+= operator
、プロパティは暗黙のうちに削除されます。
if (CMAKE_CXX_COMPILER_ID STREQUAL "SunPro")
set_target_properties(cryptest-program PROPERTIES LINK_FLAGS ${LINK_FLAGS} "-M cryptest.mapfile")
file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/cryptest.mapfile DESTINATION ${PROJECT_BINARY_DIR})
set_target_properties(cryptest-program PROPERTIES LINK_FLAGS ${LINK_FLAGS} ${CRYPTOPP_XARCH_OPTIONS})
endif ()
たとえば、mapfile が失われたため、Solaris で初期の Xeon の結果をテストすると、次のようになります。
$ ./cryptest.exe v
ld.so.1: cryptest.exe: fatal: cryptest.exe: hardware capability (CA_SUNW_HW_1) unsupported: 0x4800000 [ AES SSE4.1 ]
Killed
set_property
、set_target_properties
およびのドキュメントは次のとおりLINK_FLAGS
です。彼らは必要な詳細を提供しておらず、例を提供していません。のドキュメントset_target_properties
は特に魅力的です。
ターゲット固有のリンク フラグを追加するにはどうすればよいですか?