一部の内部テストでは、ユーザーによって明示的にオーバーライドされない限り、インストールプレフィックスをデフォルトでビルドディレクトリのサブディレクトリに設定します。ユーザーがインストールプレフィックスを指定できるのは次のとおりです。
$ cmake -DCMAKE_INSTALL_PREFIX=/foo/bar ..
しかし、ユーザーがnotを指定した場合、これをデフォルトにする必要があります。 ${PWD}/installed
。
変数CMAKE_INSTALL_PREFIX
はすでに/usr/local
に設定されているため、設定する前に、変数が未設定/空かどうかを確認することはできません。
現在の解決策は、CMAKE_INSTALL_PREFIX
変数が尊重されるように指定するためにユーザーが呼び出す必要があるカスタムスイッチを追加することです。
option(ENABLE_INSTALL_PREFIX "Install build targets to system (path given by '-DCMAKE_INSTALL_PREFIX' or '${CMAKE_INSTALL_PREFIX}' if not specified)." OFF)
if ( ENABLE_INSTALL_PREFIX )
set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root")
else()
set (CMAKE_INSTALL_PREFIX installed CACHE PATH "Installation root" FORCE)
endif()
私の質問は:
(a)CMAKE_INSTALL_PREFIX
を有効にするためにCMakeに渡す必要がある追加のフラグの煩わしさを超えて、上記の問題はありますか?
(b)上記を達成するための、より優れた、よりクリーンで、より堅牢で、より慣用的な、および/またはそれほど煩わしくない方法はありますか?
ありがとう。
CMakeは、CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT
が明示的に指定されておらず、デフォルト設定に初期化されている場合、ブール変数CMAKE_INSTALL_PREFIX
を設定します。次の方法でオーバーライドできます。
if (CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
set (CMAKE_INSTALL_PREFIX "${CMAKE_BINARY_DIR}/installed" CACHE PATH "default install path" FORCE )
endif()
数年前、私は同じことを試みたかったのです。残念ながら、私は完全に満足のいく解決策を見つけることができませんでした。代わりに、正規表現を使用してCMAKE_INSTALL_PREFIX
がデフォルトと一致するかどうかを確認することにしました。
例えば。 Windowsでは、次のコマンドを使用して、ビルドディレクトリにinstall
dirを作成します。
if ( CMAKE_INSTALL_PREFIX MATCHES "^C:/Program Files" )
# Override to an "Install" directory in the current build-dir
message( STATUS " Install-prefix was at default -> forcing it to the build-dir" )
message( STATUS " 'set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install )'" )
set( CMAKE_INSTALL_PREFIX ${CMAKE_CURRENT_BINARY_DIR}/install )
endif ( CMAKE_INSTALL_PREFIX MATCHES "^C:/Program Files" )
この構成の最大の問題は、CMakeがC:\Program Files
にインストールするように手動で指定できることです。私はNSISインストーラーでツールを配布しているので、これは問題ではありません(私にとって)。
おそらく、Unixで同様のことを試すことができます。