去掉xcode编译warning:ld: warning: directory not found for option '-L

本文介绍了解决编译过程中出现警告的方法。主要步骤包括:选择工程并编译目标,进入BuildSettings菜单,找到并删除引起警告的LibrarySearchPaths和FrameworkSearchPaths路径。
  1. 选择工程, 编译的 (targets)
  2. 选择 Build Settings 菜单
  3. 查找 Library Search Paths 和 Framework Search Paths, 删掉编译报warning的路径即OK
以下就是我的CMAKE你帮我检查检查: # Copyright (c), ETH Zurich and UNC Chapel Hill. # All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in the # documentation and/or other materials provided with the distribution. # # * Neither the name of ETH Zurich and UNC Chapel Hill nor the names of # its contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE # ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE # LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. cmake_minimum_required(VERSION 3.12) ################################################################################ # Options ################################################################################ option(SIMD_ENABLED "Whether to enable SIMD optimizations" ON) option(OPENMP_ENABLED "Whether to enable OpenMP parallelization" ON) option(IPO_ENABLED "Whether to enable interprocedural optimization" ON) option(CUDA_ENABLED "Whether to enable CUDA, if available" ON) option(GUI_ENABLED "Whether to enable the graphical UI" ON) option(OPENGL_ENABLED "Whether to enable OpenGL, if available" ON) option(TESTS_ENABLED "Whether to build test binaries" OFF) option(COVERAGE_ENABLED "Whether to enable code coverage" OFF) option(ASAN_ENABLED "Whether to enable AddressSanitizer flags" OFF) option(TSAN_ENABLED "Whether to enable ThreadSanitizer flags" OFF) option(UBSAN_ENABLED "Whether to enable UndefinedBehaviorSanitizer flags" OFF) option(PROFILING_ENABLED "Whether to enable google-perftools linker flags" OFF) option(CCACHE_ENABLED "Whether to enable compiler caching, if available" ON) option(CGAL_ENABLED "Whether to enable the CGAL library" ON) option(LSD_ENABLED "Whether to enable the LSD library" ON) option(DOWNLOAD_ENABLED "Whether to enable (automatic) download of resources (requires Curl/OpenSSL)" ON) option(UNINSTALL_ENABLED "Whether to create a target to 'uninstall' colmap" ON) option(FETCH_POSELIB "Whether to consume PoseLib using FetchContent or find_package" OFF) option(FETCH_FAISS "Whether to consume faiss using FetchContent or find_package" OFF) option(ALL_SOURCE_TARGET "Whether to create a target for all source files (for Visual Studio / XCode development)" OFF) # Disables default features, as we specify each required feature manually below. list(APPEND VCPKG_MANIFEST_FEATURES "core") # Propagate options to vcpkg manifest. if(TESTS_ENABLED) list(APPEND VCPKG_MANIFEST_FEATURES "tests") endif() if(CUDA_ENABLED) list(APPEND VCPKG_MANIFEST_FEATURES "cuda") endif() if(GUI_ENABLED) list(APPEND VCPKG_MANIFEST_FEATURES "gui") endif() if(CGAL_ENABLED) list(APPEND VCPKG_MANIFEST_FEATURES "cgal") endif() if(DOWNLOAD_ENABLED) list(APPEND VCPKG_MANIFEST_FEATURES "download") endif() project(COLMAP LANGUAGES C CXX) set(COLMAP_VERSION "3.13.0.dev0") set(POSELIB_DIR "/data/code/PoseLib-master" CACHE PATH "Path to local PoseLib source") add_subdirectory(${POSELIB_DIR} poselib) set(FAISS_SOURCE_DIR "/data/code/faiss-36b77353dc435383e0c23a709e7997a29d049041" CACHE PATH "Path to local FAISS source") add_subdirectory(${FAISS_SOURCE_DIR} faiss) set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CUDA_STANDARD 17) set(CMAKE_CUDA_STANDARD_REQUIRED ON) set_property(GLOBAL PROPERTY GLOBAL_DEPENDS_NO_CYCLES ON) ################################################################################ # Include CMake dependencies ################################################################################ set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake) include(CheckCXXCompilerFlag) include(GNUInstallDirs) # Include helper macros and commands, and allow the included file to override # the CMake policies in this file include(${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeHelper.cmake NO_POLICY_SCOPE) # Build position-independent code, so that shared libraries can link against # COLMAP's static libraries. set(CMAKE_POSITION_INDEPENDENT_CODE ON) ################################################################################ # Dependency configuration ################################################################################ set(COLMAP_FIND_QUIETLY FALSE) include(cmake/FindDependencies.cmake) ################################################################################ # Compiler specific configuration ################################################################################ if(CMAKE_BUILD_TYPE) message(STATUS "Build type specified as ${CMAKE_BUILD_TYPE}") else() message(STATUS "Build type not specified, using Release") set(CMAKE_BUILD_TYPE Release) set(IS_DEBUG OFF) endif() if("${CMAKE_BUILD_TYPE}" STREQUAL "ClangTidy") find_program(CLANG_TIDY_EXE NAMES clang-tidy) if(NOT CLANG_TIDY_EXE) message(FATAL_ERROR "Could not find the clang-tidy executable, please set CLANG_TIDY_EXE") endif() else() unset(CLANG_TIDY_EXE) endif() if(IS_MSVC) # Some fixes for the Glog library. add_compile_definitions(GLOG_USE_GLOG_EXPORT) add_compile_definitions(GLOG_NO_ABBREVIATED_SEVERITIES) add_compile_definitions(GL_GLEXT_PROTOTYPES) add_compile_definitions(NOMINMAX) set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc") # Disable warning: 'initializing': conversion from 'X' to 'Y', possible loss of data set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4244 /wd4267 /wd4305") # Enable object level parallel builds in Visual Studio. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /MP") if("${CMAKE_BUILD_TYPE}" STREQUAL "Debug" OR "${CMAKE_BUILD_TYPE}" STREQUAL "RelWithDebInfo") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /bigobj") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /bigobj") endif() endif() if(IS_GNU) if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) message(FATAL_ERROR "GCC version 4.8 or older not supported") endif() endif() if(IS_MACOS) # Mitigate CMake limitation, see: https://discourse.cmake.org/t/avoid-duplicate-linking-to-avoid-xcode-15-warnings/9084/10 add_link_options(LINKER:-no_warn_duplicate_libraries) endif() if(IS_DEBUG) add_compile_definitions(EIGEN_INITIALIZE_MATRICES_BY_NAN) endif() if(SIMD_ENABLED) message(STATUS "Enabling SIMD support") else() message(STATUS "Disabling SIMD support") endif() if(IPO_ENABLED AND NOT IS_DEBUG AND NOT IS_GNU) message(STATUS "Enabling interprocedural optimization") set_property(DIRECTORY PROPERTY INTERPROCEDURAL_OPTIMIZATION 1) else() message(STATUS "Disabling interprocedural optimization") endif() if(ASAN_ENABLED) message(STATUS "Enabling ASan support") if(IS_CLANG OR IS_GNU) add_compile_options(-fsanitize=address -fno-omit-frame-pointer -fsanitize-address-use-after-scope) add_link_options(-fsanitize=address) else() message(FATAL_ERROR "Unsupported compiler for ASan mode") endif() endif() if(TSAN_ENABLED) message(STATUS "Enabling TSan support") if(IS_CLANG OR IS_GNU) add_compile_options(-fsanitize=thread) add_link_options(-fsanitize=thread) else() message(FATAL_ERROR "Unsupported compiler for TSan mode") endif() endif() if(UBSAN_ENABLED) message(STATUS "Enabling UBsan support") if(IS_CLANG OR IS_GNU) add_compile_options(-fsanitize=undefined) add_link_options(-fsanitize=undefined) else() message(FATAL_ERROR "Unsupported compiler for UBsan mode") endif() endif() if(CCACHE_ENABLED) find_program(CCACHE ccache) if(CCACHE) message(STATUS "Enabling ccache support") set(CMAKE_C_COMPILER_LAUNCHER ${CCACHE}) set(CMAKE_CXX_COMPILER_LAUNCHER ${CCACHE}) else() message(STATUS "Disabling ccache support") endif() else() message(STATUS "Disabling ccache support") endif() if(PROFILING_ENABLED) message(STATUS "Enabling profiling support") set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lprofiler -ltcmalloc") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -lprofiler -ltcmalloc") else() message(STATUS "Disabling profiling support") endif() if(TESTS_ENABLED) message(STATUS "Enabling tests") enable_testing() include(CTest) else() message(STATUS "Disabling tests") endif() if(COVERAGE_ENABLED) if(NOT CMAKE_BUILD_TYPE STREQUAL "Debug" AND NOT CMAKE_BUILD_TYPE STREQUAL "RelWithDebInfo") message(FATAL_ERROR "Coverage can only be enabled in Debug or RelWithDebInfo mode") endif() message(STATUS "Enabling coverage support") else() message(STATUS "Disabling coverage support") endif() ################################################################################ # Add sources ################################################################################ # Generate source file with version definitions. include(GenerateVersionDefinitions) include_directories(src) link_directories(${COLMAP_LINK_DIRS}) add_subdirectory(src/colmap) add_subdirectory(src/thirdparty) ################################################################################ # Generate source groups for Visual Studio, XCode, etc. ################################################################################ COLMAP_ADD_SOURCE_DIR(src/colmap/controllers CONTROLLERS_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/estimators ESTIMATORS_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/exe EXE_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/feature FEATURE_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/geometry GEOMETRY_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/image IMAGE_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/math MATH_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/mvs MVS_SRCS *.h *.cc *.cu) COLMAP_ADD_SOURCE_DIR(src/colmap/optim OPTIM_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/retrieval RETRIEVAL_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/scene SCENE_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/sensor SENSOR_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/sfm SFM_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/tools TOOLS_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/ui UI_SRCS *.h *.cc) COLMAP_ADD_SOURCE_DIR(src/colmap/util UTIL_SRCS *.h *.cc) if(LSD_ENABLED) COLMAP_ADD_SOURCE_DIR(src/thirdparty/LSD THIRDPARTY_LSD_SRCS *.h *.c) endif() COLMAP_ADD_SOURCE_DIR(src/thirdparty/PoissonRecon THIRDPARTY_POISSON_RECON_SRCS *.h *.cpp *.inl) COLMAP_ADD_SOURCE_DIR(src/thirdparty/SiftGPU THIRDPARTY_SIFT_GPU_SRCS *.h *.cpp *.cu) COLMAP_ADD_SOURCE_DIR(src/thirdparty/VLFeat THIRDPARTY_VLFEAT_SRCS *.h *.c *.tc) # Add all of the source files to a regular library target, as using a custom # target does not allow us to set its C++ include directories (and thus # intellisense can't find any of the included files). if(ALL_SOURCE_TARGET) set(ALL_SRCS ${CONTROLLERS_SRCS} ${ESTIMATORS_SRCS} ${EXE_SRCS} ${FEATURE_SRCS} ${GEOMETRY_SRCS} ${IMAGE_SRCS} ${MATH_SRCS} ${MVS_SRCS} ${OPTIM_SRCS} ${RETRIEVAL_SRCS} ${SCENE_SRCS} ${SENSOR_SRCS} ${SFM_SRCS} ${TOOLS_SRCS} ${UI_SRCS} ${UTIL_SRCS} ${THIRDPARTY_POISSON_RECON_SRCS} ${THIRDPARTY_SIFT_GPU_SRCS} ${THIRDPARTY_VLFEAT_SRCS} ) if(LSD_ENABLED) list(APPEND ALL_SRCS ${THIRDPARTY_LSD_SRCS} ) endif() add_library( ${COLMAP_SRC_ROOT_FOLDER} ${ALL_SRCS} ) # Prevent the library from being compiled automatically. set_target_properties( ${COLMAP_SRC_ROOT_FOLDER} PROPERTIES EXCLUDE_FROM_ALL 1 EXCLUDE_FROM_DEFAULT_BUILD 1) endif() ################################################################################ # Install and uninstall scripts ################################################################################ # Install batch scripts under Windows. if(IS_MSVC) install(FILES "scripts/shell/COLMAP.bat" "scripts/shell/RUN_TESTS.bat" PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE DESTINATION "/") endif() # Install application meny entry under Linux/Unix. if(UNIX AND NOT APPLE) install(FILES "doc/COLMAP.desktop" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/applications") endif() # Configure the uninstallation script. if(UNINSTALL_ENABLED) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/CMakeUninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/CMakeUninstall.cmake" IMMEDIATE @ONLY) add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/CMakeUninstall.cmake) set_target_properties(uninstall PROPERTIES FOLDER ${CMAKE_TARGETS_ROOT_FOLDER}) endif() set(COLMAP_EXPORT_LIBS # Internal. colmap_controllers colmap_estimators colmap_exe colmap_feature_types colmap_feature colmap_geometry colmap_image colmap_math colmap_mvs colmap_optim colmap_retrieval colmap_scene colmap_sensor colmap_sfm colmap_util # Third-party. colmap_poisson_recon colmap_vlfeat ) if(LSD_ENABLED) list(APPEND COLMAP_EXPORT_LIBS # Third-party. colmap_lsd ) endif() if(GUI_ENABLED) list(APPEND COLMAP_EXPORT_LIBS colmap_ui ) endif() if(CUDA_ENABLED) list(APPEND COLMAP_EXPORT_LIBS colmap_util_cuda colmap_mvs_cuda ) endif() if(GPU_ENABLED) list(APPEND COLMAP_EXPORT_LIBS colmap_sift_gpu ) endif() if(FETCH_POSELIB) list(APPEND COLMAP_EXPORT_LIBS PoseLib) endif() if(FETCH_FAISS) list(APPEND COLMAP_EXPORT_LIBS faiss) endif() # Add unified interface library target to export. add_library(colmap INTERFACE) target_link_libraries(colmap INTERFACE ${COLMAP_EXPORT_LIBS}) target_include_directories( colmap INTERFACE $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}> $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>) install( TARGETS colmap ${COLMAP_EXPORT_LIBS} EXPORT colmap-targets LIBRARY DESTINATION thirdparty/) # Generate config and version. include(CMakePackageConfigHelpers) set(PACKAGE_CONFIG_FILE "${CMAKE_CURRENT_BINARY_DIR}/colmap-config.cmake") set(INSTALL_CONFIG_DIR "${CMAKE_INSTALL_DATAROOTDIR}/colmap") configure_package_config_file( ${CMAKE_CURRENT_SOURCE_DIR}/cmake/colmap-config.cmake.in ${PACKAGE_CONFIG_FILE} INSTALL_DESTINATION ${INSTALL_CONFIG_DIR}) install(FILES ${PACKAGE_CONFIG_FILE} DESTINATION ${INSTALL_CONFIG_DIR}) configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake/colmap-config-version.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/colmap-config-version.cmake" @ONLY) install(FILES "${CMAKE_CURRENT_BINARY_DIR}/colmap-config-version.cmake" DESTINATION "${CMAKE_INSTALL_DATAROOTDIR}/colmap") # Install targets. install( EXPORT colmap-targets FILE colmap-targets.cmake NAMESPACE colmap:: DESTINATION ${INSTALL_CONFIG_DIR}) # Install header files. install( DIRECTORY src/colmap DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} FILES_MATCHING PATTERN "*.h") install( DIRECTORY src/thirdparty DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/colmap FILES_MATCHING REGEX ".*[.]h|.*[.]hpp|.*[.]inl") # Install find_package scripts for dependencies. install( DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/cmake DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/colmap FILES_MATCHING PATTERN "Find*.cmake")
最新发布
09-16
<think>好的,用户之前多次询问关于CMake配置中Google Test下载的问题,现在他们提供了完整的CMakeLists.txt文件,希望我能检查并找出问题所在。首先,我需要仔细阅读用户提供的CMakeLists.txt,看看哪里可能强制下载了googletest。 用户的主要问题是在编译时仍然从GitHub下载googletest,即使他们已经将库路径添加到环境变量中。这通常与CMake的依赖管理方式有关,可能是通过FetchContent或ExternalProject_Add强制拉取。 首先,查看CMakeLists.txt的结构。注意到用户设置了选项TESTS_ENABLED为OFF,这可能意味着测试相关部分没有被启用。但为了确认,需要检查是否在某个地方启用了测试并导致下载。 接下来,查找是否有FetchContent或ExternalProject_Add的使用。用户提供的代码中没有直接显示这部分,但他们在问题描述中提到有[0/8] Performing download step (git clone) for 'googletest-populate',这表明项目中可能使用了ExternalProject_Add来下载googletest。通常,这样的代码可能在FindDependencies.cmake中,因为主CMakeLists.txt包含了该文件。 检查FindDependencies.cmake的内容,但用户没有提供。不过根据常见做法,可能在FindDependencies.cmake中存在ExternalProject_Add的调用。例如,可能有一个宏或函数来下载gtest,当无法找到系统安装的版本时触发下载。 用户已经设置了环境变量,但CMake可能没有正确找到本地安装的库。需要确认是否在CMake配置时指定了GTest_DIR和CMAKE_PREFIX_PATH。用户可能没有在命令行中传递这些参数,或者他们的FindDependencies.cmake没有正确处理find_package(GTest)。 另一个可能的问题是项目使用了vcpkg,并且vcpkg的配置优先从网络获取库,而不是使用本地版本。用户可能需要调整vcpkg的设置,或者修改vcpkg.json中的依赖项为本地路径。 此外,用户启用了选项DOWNLOAD_ENABLED,这可能导致项目自动下载资源,包括googletest。可以建议用户将DOWNLOAD_ENABLED设置为OFF,以防止自动下载。 还需要检查是否在add_subdirectory或target_link_libraries中显式引用了googletest,导致CMake强制下载。例如,如果某个目标依赖于GTest::GTest,但系统未找到,就会触发下载。 总结可能的解决方案:修改FindDependencies.cmake以优先使用系统库,或在CMake命令行中指定路径,或禁用下载选项。同时,确保环境变量如CMAKE_PREFIX_PATH包含Conda路径,并且GTest的配置文件存在。</think>你的 CMakeLists.txt 中 **未显式声明 `googletest` 的下载逻辑**,但问题可能出在 `FindDependencies.cmake` 或 `vcpkg` 的依赖管理中。以下是详细分析和解决方案: --- ### **根本原因** 1. **依赖管理器强制下载** 项目使用 `vcpkg` 管理依赖(通过 `VCPKG_MANIFEST_FEATURES`),且 `vcpkg` 配置可能强制从网络拉取 `googletest`。 2. **未启用 `TESTS_ENABLED` 但依赖未解耦** 虽然 `TESTS_ENABLED=OFF`,但某些模块(如 `colmap_sfm` 或 `colmap_feature`)可能隐式依赖 `googletest`,且未通过 `find_package(GTest)` 解耦。 3. **环境变量未正确传递给 CMake** 即使设置了 `PATH` 和 `LD_LIBRARY_PATH`,CMake 需要明确的 `GTest_DIR` 或 `CMAKE_PREFIX_PATH` 才能找到库。 --- ### **解决方案** #### **1. 检查 `FindDependencies.cmake`** 查看 `cmake/FindDependencies.cmake` 是否显式调用 `ExternalProject_Add` 或 `FetchContent` 下载 `googletest`。例如: ```cmake ExternalProject_Add(googletest-populate ...) ``` **修改为优先使用本地库**: ```cmake find_package(GTest QUIET) if(NOT GTest_FOUND) ExternalProject_Add(googletest-populate ...) endif() ``` --- #### **2. 通过 CMake 参数指定本地路径** 在构建时通过命令行指定 Conda 或系统安装的路径: ```bash # 假设通过 Conda 安装了 googletest conda install -c conda-forge googletest # 构建时指定路径 cmake .. -GNinja \ -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \ -DGTest_DIR=$CONDA_PREFIX/lib/cmake/GTest \ -Dgtest_force_shared_crt=ON # 若使用共享库 ``` --- #### **3. 确保 Conda 安装的 `googletest` 包含 CMake 配置文件** 如果 `GTest_DIR` 指向的路径缺少 `GTestConfig.cmake`,需手动创建: ```bash # 创建 CMake 配置文件 mkdir -p $CONDA_PREFIX/lib/cmake/GTest cat > $CONDA_PREFIX/lib/cmake/GTest/GTestConfig.cmake <<EOF set(GTest_INCLUDE_DIRS $CONDA_PREFIX/include) set(GTest_LIBRARIES $CONDA_PREFIX/lib/libgtest.a $CONDA_PREFIX/lib/libgtest_main.a) EOF ``` --- #### **4. 禁用 `vcpkg` 的自动下载** 修改 `vcpkg.json` 或通过 CMake 参数禁用自动下载: ```bash # 禁用 DOWNLOAD_ENABLED cmake .. -DDOWNLOAD_ENABLED=OFF ``` 如果使用 `vcpkg`,检查 `vcpkg.json` 中的依赖项是否包含 `gtest`,并替换为本地路径: ```json { "dependencies": { "googletest": { "path": "/path/to/local/gtest" } } } ``` --- #### **5. 验证是否启用测试模块** 虽然 `TESTS_ENABLED=OFF`,但某些模块可能隐式依赖 `googletest`。检查 `src/colmap/CMakeLists.txt` 中是否有类似逻辑: ```cmake target_link_libraries(colmap_sfm PRIVATE GTest::GTest) ``` **修改为条件依赖**: ```cmake if(TESTS_ENABLED) target_link_libraries(colmap_sfm PRIVATE GTest::GTest) endif() ``` --- ### **验证是否生效** ```bash # 检查 CMake 是否找到本地库 cmake .. -GNinja -DGTest_DIR=$CONDA_PREFIX/lib/cmake/GTest # 查看输出中是否包含: # -- Found GTest: /path/to/gtest/lib/cmake/GTest ``` --- ### **常见问题排查** - **问题 1:`find_package(GTest)` 仍失败** - **原因**:CMake 未搜索 Conda 路径。 - **解决**:确保 `CMAKE_PREFIX_PATH` 包含 `$CONDA_PREFIX`。 - **问题 2:下载逻辑仍触发** - **原因**:`vcpkg` 或 `FindDependencies.cmake` 强制下载。 - **解决**:修改依赖管理逻辑或禁用 `DOWNLOAD_ENABLED`。 - **问题 3:动态库与静态库冲突** - **解决**:统一使用 `BUILD_SHARED_LIBS` 或静态库链接。 --- ### **示例修复流程** ```bash # 1. Conda 安装 Google Test conda install -c conda-forge googletest # 2. 创建 CMake 配置文件(如缺失) mkdir -p $CONDA_PREFIX/lib/cmake/GTest cat > $CONDA_PREFIX/lib/cmake/GTest/GTestConfig.cmake <<EOF set(GTest_INCLUDE_DIRS $CONDA_PREFIX/include) set(GTest_LIBRARIES $CONDA_PREFIX/lib/libgtest.a $CONDA_PREFIX/lib/libgtest_main.a) EOF # 3. 构建时指定路径 cmake .. -GNinja \ -DCMAKE_PREFIX_PATH=$CONDA_PREFIX \ -DGTest_DIR=$CONDA_PREFIX/lib/cmake/GTest \ -DDOWNLOAD_ENABLED=OFF ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值