프로젝트의 일부로 빌드되고 링크 된 라이브러리가 있습니다. 나는 시스템 전역 (또는 $ {CMAKE_INSTALL_PREFIX}이 설정되어있는 곳)에 라이브러리를 설치하도록 OPTIONALLY 기능을 제공하고자합니다. 그렇지 않으면 기본적으로 프로젝트의 최종 빌드 제품이 정적으로 라이브러리에 링크되고 전자는 설치되지만 라이브러리 바이너리는 빌드 디렉토리에 남아있게됩니다.CMake : 'make install [all]'에서 사용자 지정 설치 대상 제외
에서 다른 단어 :
$ make
$ make install
구축하고, 프로그램을 설치하지만,
$ make install.foo
같은 단지 뭔가 $ {CMAKE_INSTALL_PREFIX}에 라이브러리를 설치합니다, 필요한 경우 먼저 구축하는 것입니다.
나는 지금까지 이런 일이 (실제 스크립트에서 단순화를, 그래서 오류가있을 수 있습니다) :
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_LIST_DIR}")
SET (FOO_LIBRARY "foo")
# Following builds library and makes it available to
# be linked other targets within project by:
# TARGET_LINK_LIBRARIES(${progname} ${FOO_LIBRARY})
ADD_LIBRARY(${FOO_LIBRARY}
foo/foo.cpp # and other sources ...
)
###########################################################
# Approach #1
# -----------
# Optionally allow users to install it by invoking:
#
# cmake .. -DINSTALL_FOO="yes"
#
# This works, but it means that users will have to run
# cmake again to switch back and forth between the libary
# installation and non-library installation.
#
OPTION(INSTALL_FOO "Install foo" OFF)
IF (INSTALL_FOO)
INSTALL(TARGETS ${FOO_LIBRARY} DESTINATION lib/foo)
SET(FOO_HEADERS foo/foo.h)
INSTALL(FILES ${FOO_HEADERS} DESTINATION include/foo)
UNSET(INSTALL_FOO CACHE)
ENDIF()
###########################################################
###########################################################
# Approach #2
# -----------
# Optionally allow users to install it by invoking:
#
# make install.foo
#
# Unfortunately, this gets installed by "make install",
# which I want to avoid
SET(FOO_INSTALL "install.foo")
ADD_CUSTOM_TARGET(${FOO_INSTALL}
COMMAND ${CMAKE_COMMAND}
-D COMPONENT=foo
-P cmake_install.cmake)
ADD_DEPENDENCIES(${FOO_INSTALL} ${FOO_LIBRARY})
INSTALL(TARGETS ${FOO_LIBRRARY}
DESTINATION lib/foo COMPONENT foo)
SET(FOO_HEADERS foo/foo.h)
INSTALL(FILES ${FOO_HEADERS}
DESTINATION include/foo COMPONENT foo)
###########################################################
으로는 작품의 접근 방식 # 1 종류 볼 수 있지만, 필요한 단계는 설치
도서관은 다음과 같습니다
$ cmake .. -DINSTALL_FOO="yes"
$ make && make install
그리고, 다시 "정상"에 갈 구축, 사용자는 "그렇지 않으면 라이브러리는 다음에 설치됩니다은"-DINSTALL_FOO "옵션을 사용하지 않고 cmake 다시 실행하는 것을 기억해야한다 설치하십시오. "
두 번째 방법은 "make install.foo"를 실행할 때 작동하지만 "make install"을 실행하면 라이브러리도 설치됩니다. 후자를 피하고 싶습니다.
아무에게도이를 달성하는 방법에 대한 제안이 있습니까?
감사합니다. @sakra. 결과적으로 FOO_LIBRARY는 자동으로 만들어지며, 보통 "make"에 링크가되는 타겟이 있다면 자동으로 만들어지게됩니까? – Jeet
예. 'TARGET_LINK_LIBRARIES'를 사용하면 FOO_LIBRARY가 빌드됩니다. – sakra
감사합니다. (1)에 대한 경고를 억제하는 것이 좋을 것입니다. – Jeet