2017-12-06 1 views
0

が存在する場合、私はCMakeのに新たなんだと私は私のルートCMakeLists.txtでこれを実行しようとしました確認してくださいOFFステータス。 CMakeでより高いレベルのディレクトリをチェックすることは可能ですか?または間接的な方法でそれをやっているかもしれませんCMakeのは、より高いレベルのディレクトリが

+0

'add_subdirectory()'を使用できるかどうか確認するには、これが必要ですか? – Florian

+0

はい、私は後でやるがそれが目的だよ。 – JonOsterman

+1

オッケー、そうだと思った。私の答えに私のバージョンを加えました。 – Florian

答えて

1

${PROJECT_SOURCE_DIR}の後に/が足りないと思います。完全にアウト

ここで私は、この(if (EXISTS ...)は、完全なパスを必要としていることに注意してください)に使用するコードです(「ガードいったん追加」を含む)私の拡張add_subdirectory()バージョン内部

get_filename_component(_fullpath "${_dir}" REALPATH) 
if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt") 
    ... 

そして、ここで:

function(my_add_subdirectory _dir) 
    get_filename_component(_fullpath "${_dir}" REALPATH) 
    if (EXISTS "${_fullpath}" AND EXISTS "${_fullpath}/CMakeLists.txt") 
     get_property(_included_dirs GLOBAL PROPERTY GlobalAddSubdirectoryOnceIncluded) 
     list(FIND _included_dirs "${_fullpath}" _used_index) 
     if (${_used_index} EQUAL -1) 
      set_property(GLOBAL APPEND PROPERTY GlobalAddSubdirectoryOnceIncluded "${_fullpath}") 
      add_subdirectory(${_dir} ${ARGN}) 
     endif() 
    else() 
     message(WARNING "my_add_subdirectory: Can't find ${_fullpath}/CMakeLists.txt") 
    endif() 
endfunction(my_add_subdirectory) 
+0

完全なパスでは、私は/ Users/Me/My_Projectのようなものを意味すると仮定しているので、移植性が損なわれますか? – JonOsterman

+0

@JonOstermanいいえ、私は '$ {CMAKE_CURRENT_SOURCE_DIR}'のような接頭辞を付けなければならないということです。 'if(EXISTS ...'は未定義の振る舞いを持っています) – Florian

+0

ありがとう、それは働いた – JonOsterman

関連する問題