从主 CMakeLists.txt 中,设置一个环境变量,其中包含用于下载和构建外部项目的公共根路径,例如:
set (ENV EXTERNAL_PROJ_DOWNLOAD_DIR "${CMAKE_SOURCE_DIR}/externalProjects")
用作下载和构建依赖项的根文件夹。您可以在主项目中设置(和使用)它,并从您的第一个依赖项(也依赖于您的第二个依赖项的那个)中读取此值。
在实践中看到它应用于您评论中链接的项目,您将设置EXTERNAL_PROJ_DOWNLOAD_DIR
IN Khronos,然后在 Khronos 和 tritium 项目中链接到 PortAudio,您将拥有:
find_package(PortAudio)
if (${PORTAUDIO_FOUND})
include_directories(${PORTAUDIO_INCLUDE_DIRS})
else ()
ExternalProject_Add(
PortAudio
GIT_REPOSITORY "https://github.com/syb0rg/PortAudio2.git"
SOURCE_DIR "$ENV{EXTERNAL_PROJ_DOWNLOAD_DIR}/PortAudio"
UPDATE_COMMAND ""
INSTALL_COMMAND ""
BUILD_IN_SOURCE ON
LOG_DOWNLOAD ON
LOG_UPDATE ON
LOG_CONFIGURE ON
LOG_BUILD ON
LOG_TEST ON
LOG_INSTALL ON
)
ExternalProject_Get_Property(PortAudio SOURCE_DIR)
ExternalProject_Get_Property(PortAudio BINARY_DIR)
set(PORTAUDIO_SOURCE_DIR ${SOURCE_DIR})
set(PORTAUDIO_BINARY_DIR ${BINARY_DIR})
set(PORTAUDIO_LIBRARIES ${PORTAUDIO_SOURCE_DIR}/libportaudio_static.a)
set(DEPENDENCIES ${DEPENDENCIES} PortAudio)
include_directories(${PORTAUDIO_SOURCE_DIR}/include)
endif ()
SET(LIBS ${LIBS} ${PORTAUDIO_LIBRARIES})
set (ENV EXTERNAL_PROJ_BINARY_DIR "${CMAKE_BINARY_DIR}/externalProjects")
如果您想激活源外构建,也可以使用 。
我建议使用环境变量,因为我不知道从 Khronos 设置的缓存变量是否会在氚中可见......
请参阅set和env的文档。