2017-04-15 8 views
0

CMakeListsファイルで私のプロジェクトのポストビルドイベントを追加しようとしています。 このビルド後のイベントは、実行可能ファイルの近くにQtライブラリを置く必要があります。 私はそれを行うにはadd_custom_commandを使用します。CMake経由で共有ライブラリ名を生成

set(libraryFileName ${QtDir}/bin/${packageName}.dll) 

# Copy qt library after build 
add_custom_command(
    TARGET ${target} POST_BUILD    #Path to cmake executable file 
    COMMAND "${CMAKE_COMMAND}" -E   #CMake in command mode 
     copy        #Copy command 
     "${libraryFileName}"    #Path to the file 
     "$<TARGET_FILE_DIR:${target}>"  #Where to copy 
    COMMENT "Copying to output directory") 

主な問題は、すべてのシステムに正しくlibraryFileNameを生成する方法ですか?つまり、私の魂はWindowsで動作しますが、他のシステムタイプでは失敗します。共有ライブラリの拡張機能をハードコードする代わりに、その拡張機能を入手する方法はありますか?

答えて

0

私の場合の解決策が見つかりました。しかし、それはQtのためだけに働くかもしれません。

# Get package location 
get_target_property(location ${qtVersion}::${shortPackageName} LOCATION) 

# Copy qt library after build 
add_custom_command(
    TARGET ${target} POST_BUILD    #Path to cmake executable file 
    COMMAND "${CMAKE_COMMAND}" -E   #CMake in command mode 
     copy        #Copy command 
     "${location}"      #Path to the file 
     "$<TARGET_FILE_DIR:${target}>"  #Where to copy 
    COMMENT "Copying ${packageName}...") 
+0

'$ 'を 'copy'のソースの場所として使用できませんか? – Florian

+0

「ポリシーCMP0026」(https://cmake.org/cmake/help/latest/policy/CMP0026.html)もあります。これは「ビルドターゲットのLOCATIONプロパティの使用を拒否する」もので、新しいバージョンのCMakeでの警告/エラー。 – Florian

0

プラットフォームチェッカーを追加し、そのチェックに応じて変数を設定できます。

message(STATUS "Current CMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}") 

if("${CMAKE_SYSTEM_NAME}" STREQUAL "WIN98") 
    set(libraryFileName ${QtDir}/bin/${packageName}.dll) 
elseif("${CMAKE_SYSTEM_NAME}" STREQUAL "LINUX") 
    set(libraryFileName ${QtDir}/bin/${packageName}.so) 
else 
    message(ERROR "The system ${CMAKE_SYSTEM_NAME} is not supported.") 
endif() 
+0

もっと一般的なアプローチのために['CMAKE_SHARED_LIBRARY_SUFFIX'](https://cmake.org/cmake/help/latest/variable/CMAKE_SHARED_LIBRARY_SUFFIX.html)を使うのはどうですか? – Florian

関連する問題