2017-09-13 5 views
0

私は${CMAKE_INSTALL_PREFIX}(ユーザーが提供)にインストールする必要があるプロジェクトを持っています。サブディレクトリのCMAKE_INSTALL_PREFIXを変更します

add_subdirectory(subproject)というサブプロジェクトが含まれています。このサブプロジェクトはコンテンツを${CMAKE_INSTALL_PREFIX}にインストールしますが、私はむしろ${CMAKE_INSTALL_PREFIX}/subprojectにインストールしたいと考えています。サブプロジェクトに触れることなく、どうすればいいですか?

私はこれを試してみた:しかし、それは効果がなかった:私もこれを試してみた

set(_INSTALL_PREFIX_BACKUP ${CMAKE_INSTALL_PREFIX}) 
set(CMAKE_INSTALL_PREFIX ${CMAKE_INSTALL_PREFIX}/subproject) 
add_subdirectory(subproject) 
set(CMAKE_INSTALL_PREFIX ${_INSTALL_PREFIX_BACKUP}) 

include(ExternalProject) 
ExternalProject_Add(subproject 
    SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/subproject 
    CMAKE_ARGS -DCMAKE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}/subproject" 
    INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/subproject" 
) 
+0

ないWindowsのわからが、Linux上で**同じディレクトリに、メインとサブの両方をインストール**(使用同じ* CMAKE_INSTALL_PREFIX *)はOKです。さらに、サブディレクトリにサブプロジェクトをインストールすることは、ユーザーにとっては何となく珍しいことです。 * CMAKE_INSTALL_PREFIX *については、プロジェクトごとのディレクトリではなく、環境ごとの**として考えることができます。 1つの環境に複数のプロジェクトがインストールされている場合があります。ここでも、これはLinuxに関するものです。あなたの試みに関しては、 'ExternalProject'を使うことはうまくいくはずです。 – Tsyvarev

答えて

0

ここに私が思いついた解決策があります。サブプロジェクトでは:スーパープロジェクトで

if (SUBPROJECT_INSTALL_PREFIX) 
    set(_SUBPROJECT_INSTALL_PREFIX ${SUBPROJECT_INSTALL_PREFIX}/) 
else() 
    set(_SUBPROJECT_INSTALL_PREFIX .) 
endif() 

install(TARGETS ${PROJECT_NAME} 
     RUNTIME DESTINATION ${_SUBPROJECT_INSTALL_PREFIX}/bin 
     ARCHIVE DESTINATION ${_SUBPROJECT_INSTALL_PREFIX}/lib/static 
     LIBRARY DESTINATION ${_SUBPROJECT_INSTALL_PREFIX}/lib) 

、私はその後使用:

set(SUBPROJECT_INSTALL_PREFIX "path/to/subproject" CACHE STRING "Path in project") 
add_subdirectory(subproject) 
1

それはすべてinstall()機能についてですが。あなたのサブプロジェクトのCMakeLists.txt

次の行必要があります:あなたはRUNTIMELIBRARYを調整することができ、あなたのユースケースに応じて、

install(TARGETS ${PROJECT_NAME} LIBRARY DESTINATION subproject) 

を。
subprojectここにパスがあります。それは${CMAKE_INSTALL_PREFIX}に相対的です。

documentationを参考にしてください。

+0

ここでのトリックは、私のサブプロジェクトをスーパープロジェクトに無関係にしたいと思うことです。サブプロジェクトは複数のスーパープロジェクトで使用されており、各スーパープロジェクトの異なる場所にインストールされます。私は、インストールプレフィックスを設定するために、サブプロジェクトのキャッシュに文字列オプションを追加することをお勧めします。 – Stewart

関連する問題