9

複数の小さな実行可能ファイルで構成されるプロジェクトに取り組んでいます。実行可能ファイルは、ターミナル (またはコマンド プロンプト) から実行することを意図しており、任意のプログラミング言語で記述できます。インタープリター言語で書かれたものには unixy システム用のシバン行がありますが、それらのファイル拡張子は Windows の PATHEXT 環境変数に追加されます。

すべてのプログラミング言語と両方の主要なプラットフォーム グループで実行可能ファイルを一貫して使用するには、unixy システムで解釈されたプログラムのファイル名からファイル拡張子を削除する必要があります。(「一貫した使用法」とは、ファイル拡張子を指定する必要なく、プログラムの名前を入力して起動することを意味します。)

具体的には、次の CMakeLists ファイルのようなものを記述したとします。

project (Mixed Example)

add_executable (banana banana.cpp)
add_executable (grape grape.hs)
add_script? (orange orange.py)
add_script? (strawberry strawberry.lua)

install (TARGETS banana grape orange strawberry DESTINATION bin)

次に、 と を通常の方法でコンパイルし、プラットフォームに応じて と のファイル拡張子を条件付きで削除したいと考えてbanana.cppいます。したがって、UNIX システムではディレクトリに次のファイルが含まれている必要があります。grape.hsorange.pystrawberry.luabin

banana grape orange strawberry

Windows では次のようになります。

banana.exe grape.exe orange.py strawberry.lua

それ、どうやったら出来るの?

4

1 に答える 1

7

これらのスクリプト ファイルを CMake ターゲットとして扱わず、代わりにファイルとして扱う場合は、次のことができるはずです。

project (Mixed Example)

add_executable (banana banana.cpp)
add_executable (grape grape.hs)

install (TARGETS banana grape DESTINATION bin)
if (UNIX)
  install (FILES orange.py DESTINATION bin RENAME orange)
  install (FILES strawberry.lua DESTINATION bin RENAME strawberry)
else (WIN32)
  install (FILES orange.py strawberry.lua DESTINATION bin)
endif ()


install (FILES ...複数回 呼び出すのではなく関数を使用する場合は、次のようにします。

function (install_files)
  if (UNIX)
    foreach (file ${ARGV})
      get_filename_component (name_without_extension ${file} NAME_WE)
      install (FILES ${file} DESTINATION bin RENAME ${name_without_extension})
    endforeach ()
  else (WIN32)
    install (FILES ${ARGV} DESTINATION bin)
  endif ()
endfunction ()

install (TARGETS banana grape DESTINATION bin)
install_files (orange.py strawberry.lua)
于 2012-04-25T17:49:50.280 に答える