0

目標は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_propertyset_target_propertiesおよびのドキュメントは次のとおりLINK_FLAGSです。彼らは必要な詳細を提供しておらず、例を提供していません。のドキュメントset_target_propertiesは特に魅力的です。

ターゲット固有のリンク フラグを追加するにはどうすればよいですか?

4

1 に答える 1