как заставить CMake ждать завершения ExternalProject_Add sh? - PullRequest
0 голосов
/ 06 августа 2020

Структура проекта:

rocksdb/CMakeLists.txt
...
rocksdb/third-party/CMakeLists.txt
rocksdb/third-party/snappy

В стороне rocksdb/third-party/CMakeLists.txt, я добавил snappy в качестве внешнего проекта, как показано ниже:

# Snappy                                                                                                                                            
IF(WITH_SNAPPY)                                                                                                                                     
  FIND_PACKAGE(snappy QUIET)                                                                                                                        
  IF (NOT snappy_FOUND)                                                                                                                             
    MESSAGE("[/third-party] snappy not found, build target")                                                                                
    ExternalProject_Add(snappy-project                                                                                                              
        SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/snappy                                                                                               
        CONFIGURE_COMMAND mkdir -p build                                                                                                            
        BUILD_IN_SOURCE 1                                                                                                                           
        BUILD_COMMAND cd build && cmake ../ -DCMAKE_INSTALL_PREFIX=${CMAKE_BINARY_DIR} -DSNAPPY_BUILD_TESTS=OFF -DHAVE_LIBLZO2=OFF && make -j 10    
        INSTALL_COMMAND cd build && ls -l && make install && cd ../ && rm -rf build)                                                                
    ADD_LIBRARY(snappy STATIC IMPORTED GLOBAL)                                                                                                      
    ADD_DEPENDENCIES(snappy snappy-project)                                                                                                         
    SET_TARGET_PROPERTIES(snappy PROPERTIES                                                                                                         
        IMPORTED_LOCATION ${CMAKE_BINARY_DIR}/lib/libsnappy.a                                                                                       
        INCLUDE_DIRECTORIES ${CMAKE_BINARY_DIR}/include)                                                                                            
  ELSE()                                                                                                                                            
    MESSAGE("[/third-party] snappy exist, not build")                                                                                       
  ENDIF()                                                                                                                                           
ENDIF()                                                                                                                                             

И в CMakeLists.txt верхнего уровня я использую

  add_subdirectory(third-party)
  if(WITH_SNAPPY)
    add_definitions(-DSNAPPY)
    if(NOT TARGET snappy)
        find_package(snappy QUIET)
        if(NOT snappy_FOUND)
            message("[] snappy find package failed!")
        else()
            message("[] snappy find package success!")
        endif()
    else()
        message("[] snappy target existed!")
    endif()
    get_target_property(snappy_INCLUDE_DIR snappy INCLUDE_DIRECTORIES)
    include_directories(${snappy_INCLUDE_DIR})
    message("snappy include dir : ${snappy_INCLUDE_DIR}")
    list(APPEND THIRDPARTY_LIBS snappy)
  endif()

, чтобы сделать мгновенную цель доступной.

Но проблема в том, что когда я использую make -j 100 для сборки проекта RocksDB, оказывается, что мгновенный запуск не создается сначала.

Может кто поможет решить проблему? спасибо!

== EDIT == Вот как я использую snappy-библиотеку:


add_library(${ROCKSDB_STATIC_LIB} STATIC ${SOURCES})
target_link_libraries(${ROCKSDB_STATIC_LIB} ${THIRDPARTY_LIBS} ${SYSTEM_LIBS})

Я не вижу здесь никаких проблем, это действительно подключено!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...