1

別のライブラリを使用しているライブラリを構築する必要があります。CMake-Gui に表示されない別のライブラリの変数を作成し、代わりに CMake スクリプトによって構成された値を使用するにはどうすればよいですか?

たとえば、アプリケーションがモバイル用にビルドされている場合、既に OpenGL ES のフラグがありますが、SDL の "VIDEO_OPENGLES" 変数が GUI に表示されます。問題は、私のビルド スクリプトは何が起こるかを既に知っているため、私のコードをコンパイルする必要があるユーザーの GUI を汚染する代わりに、他のスクリプトを喜んで事前構成できることです。

また、2 つのライブラリに偶然同じ名前の 2 つの変数があり、異なる方法で使用されている場合にどうなるかを知りたいです。

4

1 に答える 1

3

キーワードはINTERNAL変数のプロパティです。次の例を見てください。

テスト/CMakeLists.txt:

cmake_minimum_required(VERSION 2.8)

Project(Test)

add_subdirectory(Component1)
add_subdirectory(Component2)

Test/Component1/CMakeLists.txt:

cmake_minimum_required(VERSION 2.8.11)

project(Component1)

set(SOURCES test1.c)

set(Component1_CONF "SomeValue" CACHE STRING "Component1_CONF description")
message(STATUS "Component1_CONF=${Component1_CONF}")

add_library(Component1 ${SOURCES})
target_include_directories(
  Component1 INTERFACE
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>"
  "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>"
)

Test/Component2/CMakeLists.txt:

project(Component2)

set(SOURCES test1.c)

set(Component2_CONF "/etc/passwd" CACHE FILEPATH "Component2_CONF description")

add_executable(Component2 ${SOURCES})
target_link_libraries(Component2 Component1)

実際Component2には、実行可能ファイルではなく静的ライブラリまたは共有ライブラリにすることができますが、それは問題ではありません。

cmake-gui最上位ディレクトリで実行して実行すると、とのConfigure両方が表示されます。ただし、トップレベルを変更して、強制的に設定する行を追加すると:Component1_CONFComponent2_CONFCMakeLists.txtComponent1_CONF

cmake_minimum_required(VERSION 2.8)

Project(Test)

set(Component1_CONF "Other value" CACHE INTERNAL "Component1_CONF forced value" FORCE)
add_subdirectory(Component1)
add_subdirectory(Component2)

コマンドライン ( ) 構成Component1_CONFから効果的に隠します。cmake-gui-DComponent1_CONF=Boo

また、通常、変数は現在のスコープでのみ設定されることに注意してください (PARENTキーワードが使用されていない場合)。したがって、あるディレクトリに設定された変数は、ピア サブディレクトリおよび親サブディレクトリに設定された変数には影響しません。ただし、変数がまったく同じスコープで設定されている場合 (たとえば、構成テストを親内から実行する場合CMakeLists.txt)、はい、相互に干渉する可能性があります。これを防ぐために、CMake は変数を異なるパッケージから明示的に分離する命名規則を使用します。ほとんどの構成マクロは、マクロで設定される変数の名前プレフィックスを指定する「プレフィックス」パラメーターを受け取るため、マクロ ユーザー (アプリケーションの CMakeLists.txt) は、異なる依存パッケージからテスト変数を明示的に分離できます。

于 2015-01-10T09:22:25.200 に答える