3

make installクロスコンパイルする必要があるので、CMakeのグーグルモックとグーグルテストフレームワークにインストールディレクティブを追加したい(つまり、正しいことをしたい)。

これは外部ライブラリであるため、変更を非間接的に保持したいと思います。CMake File Globbingを使用せずにサブディレクトリをglobするように動作させる可能性はありGLOB_RECURSEますか?

gtestで発生する問題は、再帰的にglobを実行すると、include / gtest/interalが定義した関数によってフラット化されることです。したがって、ディレクトリ内のファイルには、代わりにinclude / gtest/internalがインストールされ${prefix}/include/gtestます${prefix}/include/gtest/internal

可能であればCMakeLists.txt、インクルードディレクトリにファイルを追加したくありません。

function(install_header dest_dir)
    foreach(header ${ARGN})
        install(FILES include/${header}
            DESTINATION include/google/${dest_dir}
        )
    endforeach()
endfunction()

# doesn't work with GLOB
# but works with GLOB_RECURSE -- however copies more than intended
file(GLOB headers RELATIVE ${gtest_SOURCE_DIR}/include/ *.h.pump *.h )
file(GLOB internalheaders RELATIVE ${gtest_SOURCE_DIR}/include/gtest/internal/ *.h.pump *.h )
if(NOT headers)
message(FATAL_ERROR "headers not found")
endif()
if(NOT internalheaders)
message(FATAL_ERROR "headers not found")
endif()

install_header(gtest ${headers})
install_header(gtest/internal ${internalheaders})
4

1 に答える 1

3

私のコメントを答えに変えます。

私はあなたが意図したことを達成できるはずだと信じていますinstall(DIRECTORY ...):

install(
  DIRECTORY ${gtest_SOURCE_DIR}/include/  #notice trailing slash - will not append "include" to destination
  DESTINATION include/google/gtest
  FILES_MATCHING PATTERN "*.h.pump" PATTERN "*.h"  # install only files matching a pattern
  PATTERN REGEX "/internal/" EXCLUDE  # ignore files matching this pattern (will be installed separately)
)

install(
  DIRECTORY ${gtest_SOURCE_DIR}/include/gtest/internal  #notice no trailing slash - "internal" will be appended to destination
  DESTINATION include/google/gtest
  FILES_MATCHING PATTERN "*.h.pump" PATTERN "*.h"  # install only files matching a pattern
)

私は gtest のディレクトリ構造に慣れていません。上記は、ヘッダーが inincludeおよび in であることを前提としていinclude/gtest/internalます。関心のあるヘッダーがinclude/gtestおよびに存在するinclude/gtest/internal場合は、最初のディレクトリ名に追加して、パターンと 2 番目のコマンドgtestを取り除くことができます。EXCLUDEinstall

于 2013-03-19T13:42:03.437 に答える