6

さまざまな場所で構築する必要がある大規模なクロスプラットフォームプロジェクトがあります。いくつかの場所では、さまざまなUIツールキットやサウンドAPIなどが利用できる場合があります。私は、存在するライブラリに基づいて、どのターゲットを自動的に構成するかを自動的に構成するための最良の方法を見つけようとしています。

私が試しているコードは、たとえば次のとおりです。

find_library(PC_EGL EGL)
find_library(PC_GLESv2 GLESv2)
find_library(PC_Xxf86vm Xxf86vm)
if (DEFINED PC_EGL AND DEFINED PC_GLESv2 AND DEFINED PC_Xxf86vm)
  add_executable(foo foo.cpp)
  target_link_libraries(foo ${PC_EGL} ${PC_GLESv2} ${PC_Xxf86vm})
endif()

ただし、libGLESv2が使用できないシステムでこれをビルドすると、次のエラーが発生します。

CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
PC_GLESv2
    linked by target "foo" in directory /path/to/platform

find_libraryのドキュメントは、変数PC_EGL_NOTFOUNDを設定する必要があることを示していますが、そうではありません(CMake2.8.5)。では、find_libraryを使用して、ターゲットを存在させる必要があるかどうかを判断する適切な方法は何でしょうか。使っているようです

if (NOT PC_EGL MATCH "-NOTFOUND")

は少し壊れやすくて面倒なので、ライブラリが見つかったかどうかに基づいてCMakeコマンドパスを決定するためのより良いメカニズムはありますか?

4

1 に答える 1

10

それは単に

if(PC_EGL AND PC_GLESv2 AND PC_GLESv2)

CMakeは、、、0FALSEfalseとしてOFF扱います。ANYTHING-NOTFOUND

于 2012-04-04T06:16:25.747 に答える