2016-05-03 18 views
0

cmake 3.5
私はCMakeプロジェクトで次のコードを試しました。 のはSUBDIRSは、ディレクトリのリストが含まれているとしましょう:foreach()ループでCmake、include_directoryが機能しない

1.

foreach(subdir ${SUBDIRS}) 
    if(IS_DIRECTORY ${subdir}) 
     MESSAGE(STATUS "Including dir " ${subdir}) 
     include_directories(${subdir}) 
    endif() 
endforeach() 

2.

set(include_dirs "") 
foreach(subdir ${SUBDIRS}) 
    if(IS_DIRECTORY ${subdir}) 
     list(APPEND include_dirs ${subdir}) 
    endif() 
endforeach() 
include_directories(${include_dirs}) 

3作品以上のソースコードの

set(include_dirs "") 
foreach(subdir ${SUBDIRS}) 
    if(IS_DIRECTORY ${subdir}) 
     set(include_dirs "${include_dirs} ${subdir}") 
    endif() 
endforeach() 
include_directories(${include_dirs}) 

なし。私は

include_directories("path/to/dir1" "path/to/dir2") 

は動作しません

include_directories("path/to/dir1 path/to/dir2") 

とは対照的に、同様に動作することを気づいた

include_directories(path/to/dir1 
        path/to/dir2 
        ...) 

:私は特に各パスを宣言する必要がありますように
が見えます。私はそれがforeach()の問題を反映していると思います。

提案がありますか?おかげさまで

----------- -----------編集
1.からのメッセージ:MESSAGE(STATUS "Including dir " ${subdir})は出力を提供します。

including dir path/to/dir1 
including dir path/to/dir2 
+0

「動作しない」とはどういう意味ですか?あなたは何を期待しますか?何が起こりますか? 1つの引数だけを渡し、有効なパスではないので、 'include_directories(" path/to/dir1 path/to/dir2 ")は間違っています。 – usr1234567

+0

'include_directories()'ディレクティブの後に含まれるすべてのディレクトリを除きます。 – hudac

+0

追加する実際のパスを指定します。彼らはスペースを含んでいますか?あなたが得られるアウトプットは何ですか? – usr1234567

答えて

1

あなたの最初のコードスニペット私にはうまく見えますが、少し前に書いたプロジェクトでCMakeのコードをチェックしたところ、ほぼ同じに見えました。

foreach(subdir ${SUBDIRS}) 
    if(IS_DIRECTORY ${subdir}) 
     MESSAGE(STATUS "Including dir " ${subdir}) 
     include_directories(${subdir}) 
    endif() 
endforeach() 

私の最高の推測では、あなたは間違ってSUBDIRS変数を設定していることだろう。

は次のような何かをやってみてください。

set(SUBDIRS 
    path/to/dir1 
    path/to/dir2 
) 

、ループはその後、動作するかどうかを確認します。もしそうなら、おそらく変数の値に問題があります。 SUBDIRSを設定する値のリストの周りに引用符を入れないでください。ただし、リスト内の個々のエントリを引用できます。

+0

これはうまく動作しません:O:O:O – hudac

+0

別の' message() 'ループ内にありますが、 'if(IS_DIRECTORY)'部分の外側にあります。これにより、ループが正しく機能しているかどうかを知ることができます。私の推測では、 'SUBDIRS'のあなたのディレクトリパスは正しくありません。現在のcmakeディレクトリを基準にして指定することができます。たとえば、 'path/to/dir1'ではなく、' $ {CMAKE_CURRENT_SOURCE_DIR}/path/to/dir1'を実行します。 –

+0

何を言うべきかわからない、うまくいきません... – hudac

関連する問題