按照here
所述的模式,我将glfw导入为项目中的子模块。find_package(Git QUIET)
if(GIT_FOUND AND EXISTS "${PROJECT_SOURCE_DIR}/.git")
# Update submodules as needed
option(GIT_SUBMODULE "Check submodules during build" ON)
if(GIT_SUBMODULE)
message(STATUS "Submodule update")
execute_process(COMMAND ${GIT_EXECUTABLE} submodule update --init --recursive
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
RESULT_VARIABLE GIT_SUBMOD_RESULT)
if(NOT GIT_SUBMOD_RESULT EQUAL "0")
message(FATAL_ERROR "git submodule update --init failed with ${GIT_SUBMOD_RESULT}, please checkout submodules")
endif()
endif()
endif()
## Check for GLFW
if(NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/glfw/CMakeLists.txt")
message(FATAL_ERROR "The submodules were not downloaded! GIT_SUBMODULE was turned off or failed. Please update submodules and try again.")
else()
add_subdirectory(glfw EXCLUDE_FROM_ALL)
endif()
您会注意到,我将项目包含在add_subdirectory()
中。这有效地添加了glfw目标,我可以将其与我的链接,但是它还包括所有glfw目标(文档,示例,...)。
当然,我不知道以错误的方式包含了该项目。
是否有任何方法可以从子模块中包含并排除其他目标?
显然EXCLUDE_FROM_ALL
无效。
答案 0 :(得分:1)
From the looks of it,您只需要通过在CACHE中设置这些选项来告诉CMake不要构建那些选项。将此添加到您的CMakeLists.txt
set(GLFW_BUILD_EXAMPLES OFF CACHE BOOL "Build GLFW without examples")
set(GLFW_BUILD_TESTS OFF CACHE BOOL "Build GLFW without tests")
set(GLFW_BUILD_DOCS OFF CACHE BOOL "Build GLFW without docs")
您需要指定变量类型和描述,以便CMake知道如何在GUI中显示此条目。
答案 1 :(得分:1)
您可以从命令行override到GLFW CMakeLists.txt
文件中定义的选项。这将关闭多余的构建:
cmake -DGLFW_BUILD_EXAMPLES=OFF -DGLFW_BUILD_TESTS=OFF -DGLFW_BUILD_DOCS=OFF ..
如果您想通过编辑顶级CMake文件来覆盖默认的GLFW选项,则可以按照建议的@Cinder饼干进行操作,但是将set()
命令放在之前 { {1}}通话:
add_subdirectory()