2017-12-20 2 views
1

CMakeのパスを正規化する堅牢な方法はありますか?CMake:パスを正規化する方法は?

例:この例では

# Let's assume that an environment variable MY_ROOT_DIR is set 
# that points to some directory. 
set(MYFILE "$ENV{MY_ROOT_DIR}/somefile.txt") 
message(${MYFILE}) 
# This will result for example in 
# Win:   C:\path\to\my\root\dir/somefile.txt 
# Unix based: /path/to/my/root/dir/somefile.txt 

は、パスコンポーネントとしてそれを使用する前に(すなわち、スラッシュとバックスラッシュを置き換えることである)MY_ROOT_DIRを正規化するために必要とされるであろう。あなたはCMakeでこれをどうやってやりますか?

CMake(またはツールチェーンのさらに下にあるツール)は、区切り記号(/または\)が混在しているパスを処理することも、できないこともあります。 CMakeは標準セパレータとして/を使用します。間違ったパス区切り\でパスをCMakeのによって生成された典型的な警告は次のようになります:

CMake Warning (dev) at cmake_install.cmake:5 (set): 
    Syntax error in cmake code at 

    C:/path/to/my/root/build/cmake_install.cmake:5 

    when parsing string 

    C:\path\to\my\root/somefile.txt 

    Invalid escape sequence \p 

    Policy CMP0010 is not set: Bad variable reference syntax is an error. Run 
    "cmake --help-policy CMP0010" for policy details. Use the cmake_policy 
    command to set the policy and suppress this warning. 

感謝をこの上の任意のヒントを!

+0

私は同意します。答えは確かです:) – normanius

+0

...私は私の問題の解決策を探すときにその他の投稿を見つけることができませんでした。 – normanius

答えて

3

これにはfile(TO_CMAKE_PATH)コマンドを使用できます。

TO_CMAKE_PATHモードは順方向スラッシュ(/)とcmakeの風路に<path>ネイティブ変換します。入力は、単一パスまたは$ENV{PATH}のようなシステム検索パスにすることができます。検索パスは、;文字で区切られたcmake形式のリストに変換されます。

ここでは一例です:

file(TO_CMAKE_PATH "$ENV{MY_DIR_VAR}" ENV_MY_DIR_VAR) 
関連する問題