2012-04-25 2 views
8

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

すべてのプログラミング言語との両方の主要なプラットフォームのグループ間で一貫性のある実行ファイルの使用状況を作るために、私は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) 

それから私は私がorange.pystrawberry.luaのファイル拡張子は条件付きで取り除かれたくながらbanana.cppgrape.hsは、プラットフォームに応じて、通常の方法でコンパイルすることにしたいです。

banana grape orange strawberry 

およびWindows上で以下:したがって、binディレクトリはunixyシステム上で以下のファイルが含まれている必要があり

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

はどのように私はそれを行うのですか?

答えて

6

あなたは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() 


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) 
+0

も新しいルールにこれを作るための方法があるので、私はすべてのスクリプトのために手動で名前の変更を指定する必要はありません:install (FILES ...複数回、あなたが行うことができますか?さらに重要なことは、すべてのスクリプトのインストール方法を2回(つまり、UNIXの場合は1回、WIN32の場合は1回)という定義方法で自分自身を節約できますか? – Julian

+0

@Julianこれをどのように行うことができるかを示す情報を追加しました。 – Fraser

+0

ありがとう、それはまさに私が探していたものと思われます! – Julian

関連する問題