我总是在构建树中运行我的可执行文件(我不是从cmake“install”运行它)。我们称之为fruit
的库是一个框架:
add_library( fruit SHARED ${FRUIT_SOURCES} )
set_target_properties( fruit PROPERTIES FRAMEWORK TRUE)
set_target_properties( fruit PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE
INSTALL_NAME_DIR "@rpath/Frameworks" )
现在我想用cmake为主应用程序设置一个自定义rpath(名为executable
)。我以为我可以使用INSTALL_RPATH
的{{1}}目标属性来定义生成程序的rpath,但这似乎只适用于已安装的可执行文件(记住我总是在cmake构建文件夹中运行我的应用程序) ):
executable
如何将rpath项定义/添加到构建树中生成的程序?
PS。这个库# this rpath is not shown in the generated executable (otool -l -v executable):
set_target_properties( executable PROPERTIES INSTALL_RPATH "@executable_path/lib/" )
只是我实际问题的一个例子。该库是在子cmake项目(git子模块)中创建的,该项目将fruit
属性添加到库中。但我有可能更改此项目的代码。有没有更好的方法让我的可执行文件在构建树中工作?
答案 0 :(得分:0)
这不是主要问题的答案,但我找到了后期脚本的答案。这是一个比主要问题中的解决方案更好的解决方案,但我仍然坚持这个问题。
set( CMAKE_MACOSX_RPATH TRUE )
set( CMAKE_SKIP_BUILD_RPATH FALSE )
set( CMAKE_BUILD_WITH_INSTALL_RPATH FALSE )
################################################################################
# this is more interesting later when we implement install (i.e. creating a
# bundle on macOS)in this CMakeLists!
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
# the RPATH to be used when installing, but only if it's not a system directory
list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir)
if("${isSystemDir}" STREQUAL "-1")
set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib")
endif("${isSystemDir}" STREQUAL "-1")
################################################################################
# add the dynamic library
add_library( fruit SHARED ${FRUIT_SOURCES} )
set_target_properties( fruit PROPERTIES FRAMEWORK TRUE)
# remove the properties INSTALL_NAME_DIR and BUILD_WITH_INSTALL_RPATH:
#set_target_properties( fruit PROPERTIES BUILD_WITH_INSTALL_RPATH TRUE
# INSTALL_NAME_DIR "@rpath/Frameworks" )