This is an automated email from the ASF dual-hosted git repository.

kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git


The following commit(s) were added to refs/heads/master by this push:
     new d653b71d79 ARROW-16168: [C++][CMake] Use target to add include paths
d653b71d79 is described below

commit d653b71d79fc381c43f59d3095cc1c9fb0c1cf7c
Author: Sutou Kouhei <[email protected]>
AuthorDate: Thu May 12 05:24:28 2022 +0900

    ARROW-16168: [C++][CMake] Use target to add include paths
    
    We can remove "include_directories(SYSTEM)" by this.
    
    Closes #12861 from kou/cpp-target-include-path
    
    Authored-by: Sutou Kouhei <[email protected]>
    Signed-off-by: Sutou Kouhei <[email protected]>
---
 ci/scripts/PKGBUILD                               |   1 +
 cpp/CMakeLists.txt                                |  39 +--
 cpp/cmake_modules/BuildUtils.cmake                | 113 ++-------
 cpp/cmake_modules/DefineOptions.cmake             |  10 +-
 cpp/cmake_modules/FindBoostAlt.cmake              |  63 -----
 cpp/cmake_modules/Findutf8proc.cmake              |   2 +-
 cpp/cmake_modules/ThirdpartyToolchain.cmake       | 284 +++++++++++++---------
 cpp/examples/parquet/parquet_arrow/CMakeLists.txt |   4 +-
 cpp/src/arrow/CMakeLists.txt                      |   7 +-
 cpp/src/arrow/dataset/CMakeLists.txt              |   2 +-
 cpp/src/arrow/filesystem/CMakeLists.txt           |   4 +-
 cpp/src/arrow/flight/CMakeLists.txt               |  24 +-
 cpp/src/arrow/flight/sql/CMakeLists.txt           |   4 +-
 cpp/src/arrow/flight/transport/ucx/CMakeLists.txt |   1 -
 cpp/src/arrow/gpu/CMakeLists.txt                  |   4 +-
 cpp/src/arrow/python/CMakeLists.txt               |  16 +-
 cpp/src/gandiva/CMakeLists.txt                    |  18 +-
 cpp/src/parquet/CMakeLists.txt                    |  23 +-
 cpp/src/plasma/CMakeLists.txt                     |   6 +-
 19 files changed, 285 insertions(+), 340 deletions(-)

diff --git a/ci/scripts/PKGBUILD b/ci/scripts/PKGBUILD
index 38f28a2328..b9b0194f5c 100644
--- a/ci/scripts/PKGBUILD
+++ b/ci/scripts/PKGBUILD
@@ -111,6 +111,7 @@ build() {
     -DARROW_S3="${ARROW_S3}" \
     -DARROW_SNAPPY_USE_SHARED=OFF \
     -DARROW_USE_GLOG=OFF \
+    -DARROW_UTF8PROC_USE_SHARED=OFF \
     -DARROW_WITH_LZ4=ON \
     -DARROW_WITH_RE2="${ARROW_WITH_RE2}" \
     -DARROW_WITH_SNAPPY=ON \
diff --git a/cpp/CMakeLists.txt b/cpp/CMakeLists.txt
index ec12feab3d..23e0ba311f 100644
--- a/cpp/CMakeLists.txt
+++ b/cpp/CMakeLists.txt
@@ -691,11 +691,20 @@ endif()
 # Linker and Dependencies
 #
 
-# Libraries to link statically with libarrow.so
-set(ARROW_LINK_LIBS)
-set(ARROW_STATIC_LINK_LIBS)
+# Libraries to link statically with libarrow.so.
+#
+# Note that arrow::hadoop is a header only target that refers
+# cpp/thirdparty/hadoop/include/. See
+# cpp/cmake_modules/ThirdpartyToolchain.cmake for details.
+set(ARROW_LINK_LIBS arrow::flatbuffers arrow::hadoop)
+set(ARROW_STATIC_LINK_LIBS arrow::flatbuffers arrow::hadoop)
 set(ARROW_STATIC_INSTALL_INTERFACE_LIBS)
 
+if(ARROW_USE_BOOST)
+  list(APPEND ARROW_LINK_LIBS Boost::headers)
+  list(APPEND ARROW_STATIC_LINK_LIBS Boost::headers)
+endif()
+
 if(ARROW_USE_OPENSSL)
   set(ARROW_OPENSSL_LIBS OpenSSL::Crypto OpenSSL::SSL)
   list(APPEND ARROW_LINK_LIBS ${ARROW_OPENSSL_LIBS})
@@ -808,6 +817,16 @@ if(ARROW_WITH_RE2)
   endif()
 endif()
 
+if(ARROW_WITH_RAPIDJSON)
+  list(APPEND ARROW_LINK_LIBS rapidjson::rapidjson)
+  list(APPEND ARROW_STATIC_LINK_LIBS rapidjson::rapidjson)
+endif()
+
+if(ARROW_USE_XSIMD)
+  list(APPEND ARROW_LINK_LIBS xsimd)
+  list(APPEND ARROW_STATIC_LINK_LIBS xsimd)
+endif()
+
 add_custom_target(arrow_dependencies)
 add_custom_target(arrow_benchmark_dependencies)
 add_custom_target(arrow_test_dependencies)
@@ -830,26 +849,18 @@ endif()
 
 set(ARROW_SHARED_PRIVATE_LINK_LIBS ${ARROW_STATIC_LINK_LIBS})
 
-# boost::filesystem is needed for S3 and Flight tests as a boost::process 
dependency.
-if(((ARROW_FLIGHT
-     OR ARROW_S3
-     OR ARROW_GCS)
-    AND (ARROW_BUILD_TESTS OR ARROW_BUILD_INTEGRATION)
-   ))
-  list(APPEND ARROW_TEST_LINK_LIBS ${BOOST_FILESYSTEM_LIBRARY} 
${BOOST_SYSTEM_LIBRARY})
-endif()
-
 if(NOT MSVC_TOOLCHAIN)
   list(APPEND ARROW_LINK_LIBS ${CMAKE_DL_LIBS})
   list(APPEND ARROW_SHARED_INSTALL_INTERFACE_LIBS ${CMAKE_DL_LIBS})
 endif()
 
 set(ARROW_TEST_LINK_TOOLCHAIN
+    arrow::flatbuffers
     GTest::gtest_main
     GTest::gtest
     GTest::gmock
-    ${BOOST_FILESYSTEM_LIBRARY}
-    ${BOOST_SYSTEM_LIBRARY})
+    Boost::filesystem
+    Boost::system)
 
 if(ARROW_BUILD_TESTS)
   add_dependencies(arrow_test_dependencies ${ARROW_TEST_LINK_TOOLCHAIN})
diff --git a/cpp/cmake_modules/BuildUtils.cmake 
b/cpp/cmake_modules/BuildUtils.cmake
index 174b1c515a..f3e3269d4f 100644
--- a/cpp/cmake_modules/BuildUtils.cmake
+++ b/cpp/cmake_modules/BuildUtils.cmake
@@ -30,25 +30,9 @@ set(ARROW_LIBRARY_PATH_SUFFIXES
     "Library/bin")
 set(ARROW_INCLUDE_PATH_SUFFIXES "include" "Library" "Library/include")
 
-set(ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS)
-if(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
-  # boost/process/detail/windows/handle_workaround.hpp doesn't work
-  # without BOOST_USE_WINDOWS_H with MinGW because MinGW doesn't
-  # provide __kernel_entry without winternl.h.
-  #
-  # See also:
-  # 
https://github.com/boostorg/process/blob/develop/include/boost/process/detail/windows/handle_workaround.hpp
-  #
-  # You can use this like the following:
-  #
-  #   target_compile_definitions(target PRIVATE
-  #                              ${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
-  list(APPEND ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS "BOOST_USE_WINDOWS_H=1")
-endif()
-
-function(ADD_THIRDPARTY_LIB LIB_NAME)
+function(add_thirdparty_lib LIB_NAME LIB_TYPE LIB)
   set(options)
-  set(one_value_args SHARED_LIB STATIC_LIB)
+  set(one_value_args)
   set(multi_value_args DEPS INCLUDE_DIRECTORIES)
   cmake_parse_arguments(ARG
                         "${options}"
@@ -59,78 +43,25 @@ function(ADD_THIRDPARTY_LIB LIB_NAME)
     message(SEND_ERROR "Error: unrecognized arguments: 
${ARG_UNPARSED_ARGUMENTS}")
   endif()
 
-  if(ARG_STATIC_LIB AND ARG_SHARED_LIB)
-    set(AUG_LIB_NAME "${LIB_NAME}_static")
-    add_library(${AUG_LIB_NAME} STATIC IMPORTED)
-    set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
-                                                     "${ARG_STATIC_LIB}")
-    if(ARG_DEPS)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
-                                                       "${ARG_DEPS}")
-    endif()
-    message(STATUS "Added static library dependency ${AUG_LIB_NAME}: 
${ARG_STATIC_LIB}")
-    if(ARG_INCLUDE_DIRECTORIES)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
-                                                       
"${ARG_INCLUDE_DIRECTORIES}")
-    endif()
-
-    set(AUG_LIB_NAME "${LIB_NAME}_shared")
-    add_library(${AUG_LIB_NAME} SHARED IMPORTED)
-
-    if(WIN32)
-      # Mark the ".lib" location as part of a Windows DLL
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_IMPLIB
-                                                       "${ARG_SHARED_LIB}")
-    else()
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
-                                                       "${ARG_SHARED_LIB}")
-    endif()
-    if(ARG_DEPS)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
-                                                       "${ARG_DEPS}")
-    endif()
-    message(STATUS "Added shared library dependency ${AUG_LIB_NAME}: 
${ARG_SHARED_LIB}")
-    if(ARG_INCLUDE_DIRECTORIES)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
-                                                       
"${ARG_INCLUDE_DIRECTORIES}")
-    endif()
-  elseif(ARG_STATIC_LIB)
-    set(AUG_LIB_NAME "${LIB_NAME}_static")
-    add_library(${AUG_LIB_NAME} STATIC IMPORTED)
-    set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
-                                                     "${ARG_STATIC_LIB}")
-    if(ARG_DEPS)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
-                                                       "${ARG_DEPS}")
-    endif()
-    message(STATUS "Added static library dependency ${AUG_LIB_NAME}: 
${ARG_STATIC_LIB}")
-    if(ARG_INCLUDE_DIRECTORIES)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
-                                                       
"${ARG_INCLUDE_DIRECTORIES}")
-    endif()
-  elseif(ARG_SHARED_LIB)
-    set(AUG_LIB_NAME "${LIB_NAME}_shared")
-    add_library(${AUG_LIB_NAME} SHARED IMPORTED)
-
+  add_library(${LIB_NAME} ${LIB_TYPE} IMPORTED)
+  if(${LIB_TYPE} STREQUAL "STATIC")
+    set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION "${LIB}")
+    message(STATUS "Added static library dependency ${LIB_NAME}: ${LIB}")
+  else()
     if(WIN32)
       # Mark the ".lib" location as part of a Windows DLL
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_IMPLIB
-                                                       "${ARG_SHARED_LIB}")
+      set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_IMPLIB "${LIB}")
     else()
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES IMPORTED_LOCATION
-                                                       "${ARG_SHARED_LIB}")
-    endif()
-    message(STATUS "Added shared library dependency ${AUG_LIB_NAME}: 
${ARG_SHARED_LIB}")
-    if(ARG_DEPS)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES
-                                                       "${ARG_DEPS}")
-    endif()
-    if(ARG_INCLUDE_DIRECTORIES)
-      set_target_properties(${AUG_LIB_NAME} PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
-                                                       
"${ARG_INCLUDE_DIRECTORIES}")
+      set_target_properties(${LIB_NAME} PROPERTIES IMPORTED_LOCATION "${LIB}")
     endif()
-  else()
-    message(FATAL_ERROR "No static or shared library provided for ${LIB_NAME}")
+    message(STATUS "Added shared library dependency ${LIB_NAME}: ${LIB}")
+  endif()
+  if(ARG_DEPS)
+    set_target_properties(${LIB_NAME} PROPERTIES INTERFACE_LINK_LIBRARIES 
"${ARG_DEPS}")
+  endif()
+  if(ARG_INCLUDE_DIRECTORIES)
+    set_target_properties(${LIB_NAME} PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                                                 "${ARG_INCLUDE_DIRECTORIES}")
   endif()
 endfunction()
 
@@ -271,11 +202,16 @@ function(ADD_ARROW_LIB LIB_NAME)
     set(OUTPUT_PATH ${BUILD_OUTPUT_ROOT_DIRECTORY})
   endif()
 
-  if(WIN32 OR (CMAKE_GENERATOR STREQUAL Xcode))
+  if(WIN32
+     OR (CMAKE_GENERATOR STREQUAL Xcode)
+     OR CMAKE_VERSION VERSION_LESS 3.12)
     # We need to compile C++ separately for each library kind (shared and 
static)
     # because of dllexport declarations on Windows.
     # The Xcode generator doesn't reliably work with Xcode as target names are 
not
     # guessed correctly.
+    # We can't use target for object library with CMake 3.11 or earlier.
+    # See also: Object Libraries:
+    # 
https://cmake.org/cmake/help/latest/command/add_library.html#object-libraries
     set(USE_OBJLIB OFF)
   else()
     set(USE_OBJLIB ON)
@@ -310,6 +246,9 @@ function(ADD_ARROW_LIB LIB_NAME)
     if(ARG_PRIVATE_INCLUDES)
       target_include_directories(${LIB_NAME}_objlib PRIVATE 
${ARG_PRIVATE_INCLUDES})
     endif()
+    target_link_libraries(${LIB_NAME}_objlib
+                          PRIVATE ${ARG_SHARED_LINK_LIBS} 
${ARG_SHARED_PRIVATE_LINK_LIBS}
+                                  ${ARG_STATIC_LINK_LIBS})
   else()
     # Prepare arguments for separate compilation of static and shared libs 
below
     # TODO: add PCH directives
diff --git a/cpp/cmake_modules/DefineOptions.cmake 
b/cpp/cmake_modules/DefineOptions.cmake
index ab7d2edf56..f3d94353ab 100644
--- a/cpp/cmake_modules/DefineOptions.cmake
+++ b/cpp/cmake_modules/DefineOptions.cmake
@@ -352,6 +352,9 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL 
"${CMAKE_CURRENT_SOURCE_DIR}")
                 "Rely on Protocol Buffers shared libraries where relevant"
                 ${ARROW_DEPENDENCY_USE_SHARED})
 
+  define_option(ARROW_SNAPPY_USE_SHARED "Rely on snappy shared libraries where 
relevant"
+                ${ARROW_DEPENDENCY_USE_SHARED})
+
   if(WIN32)
     # It seems that Thrift doesn't support DLL well yet.
     # MSYS2, conda-forge and vcpkg don't build shared library.
@@ -366,13 +369,6 @@ if("${CMAKE_SOURCE_DIR}" STREQUAL 
"${CMAKE_CURRENT_SOURCE_DIR}")
                 "Rely on utf8proc shared libraries where relevant"
                 ${ARROW_DEPENDENCY_USE_SHARED})
 
-  define_option(ARROW_SNAPPY_USE_SHARED "Rely on snappy shared libraries where 
relevant"
-                ${ARROW_DEPENDENCY_USE_SHARED})
-
-  define_option(ARROW_UTF8PROC_USE_SHARED
-                "Rely on utf8proc shared libraries where relevant"
-                ${ARROW_DEPENDENCY_USE_SHARED})
-
   define_option(ARROW_ZSTD_USE_SHARED "Rely on zstd shared libraries where 
relevant"
                 ${ARROW_DEPENDENCY_USE_SHARED})
 
diff --git a/cpp/cmake_modules/FindBoostAlt.cmake 
b/cpp/cmake_modules/FindBoostAlt.cmake
deleted file mode 100644
index 072e267c1f..0000000000
--- a/cpp/cmake_modules/FindBoostAlt.cmake
+++ /dev/null
@@ -1,63 +0,0 @@
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements.  See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership.  The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License.  You may obtain a copy of the License at
-#
-#   http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied.  See the License for the
-# specific language governing permissions and limitations
-# under the License.
-
-if(DEFINED ENV{BOOST_ROOT} OR DEFINED BOOST_ROOT)
-  # In older versions of CMake (such as 3.2), the system paths for Boost will
-  # be looked in first even if we set $BOOST_ROOT or pass -DBOOST_ROOT
-  set(Boost_NO_SYSTEM_PATHS ON)
-endif()
-
-set(BoostAlt_FIND_PACKAGE_OPTIONS)
-if(BoostAlt_FIND_VERSION)
-  list(APPEND BoostAlt_FIND_PACKAGE_OPTIONS ${BoostAlt_FIND_VERSION})
-endif()
-if(BoostAlt_FIND_REQUIRED)
-  list(APPEND BoostAlt_FIND_PACKAGE_OPTIONS REQUIRED)
-endif()
-if(BoostAlt_FIND_QUIETLY)
-  list(APPEND BoostAlt_FIND_PACKAGE_OPTIONS QUIET)
-endif()
-
-if(ARROW_BOOST_USE_SHARED)
-  # Find shared Boost libraries.
-  set(Boost_USE_STATIC_LIBS OFF)
-  set(BUILD_SHARED_LIBS_KEEP ${BUILD_SHARED_LIBS})
-  set(BUILD_SHARED_LIBS ON)
-
-  find_package(Boost ${BoostAlt_FIND_PACKAGE_OPTIONS} COMPONENTS system 
filesystem)
-  set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_KEEP})
-  unset(BUILD_SHARED_LIBS_KEEP)
-else()
-  # Find static boost headers and libs
-  # TODO Differentiate here between release and debug builds
-  set(Boost_USE_STATIC_LIBS ON)
-  find_package(Boost ${BoostAlt_FIND_PACKAGE_OPTIONS} COMPONENTS system 
filesystem)
-endif()
-
-if(Boost_FOUND)
-  set(BoostAlt_FOUND ON)
-  if(MSVC_TOOLCHAIN)
-    # disable autolinking in boost
-    add_definitions(-DBOOST_ALL_NO_LIB)
-    if(ARROW_BOOST_USE_SHARED)
-      # force all boost libraries to dynamic link
-      add_definitions(-DBOOST_ALL_DYN_LINK)
-    endif()
-  endif()
-else()
-  set(BoostAlt_FOUND OFF)
-endif()
diff --git a/cpp/cmake_modules/Findutf8proc.cmake 
b/cpp/cmake_modules/Findutf8proc.cmake
index 4d732f1869..867361cd10 100644
--- a/cpp/cmake_modules/Findutf8proc.cmake
+++ b/cpp/cmake_modules/Findutf8proc.cmake
@@ -95,7 +95,7 @@ if(utf8proc_FOUND)
                                    INTERFACE_INCLUDE_DIRECTORIES
                                    "${utf8proc_INCLUDE_DIR}")
   if(NOT ARROW_UTF8PROC_USE_SHARED)
-    set_target_properties(utf8proc::utf8proc PROPERTIES 
INTERFACE_COMPILER_DEFINITIONS
+    set_target_properties(utf8proc::utf8proc PROPERTIES 
INTERFACE_COMPILE_DEFINITIONS
                                                         "UTF8PROC_STATIC")
   endif()
 endif()
diff --git a/cpp/cmake_modules/ThirdpartyToolchain.cmake 
b/cpp/cmake_modules/ThirdpartyToolchain.cmake
index 865406e705..32669b2c07 100644
--- a/cpp/cmake_modules/ThirdpartyToolchain.cmake
+++ b/cpp/cmake_modules/ThirdpartyToolchain.cmake
@@ -200,7 +200,7 @@ endmacro()
 macro(resolve_dependency DEPENDENCY_NAME)
   set(options)
   set(one_value_args HAVE_ALT IS_RUNTIME_DEPENDENCY REQUIRED_VERSION 
USE_CONFIG)
-  set(multi_value_args PC_PACKAGE_NAMES)
+  set(multi_value_args COMPONENTS PC_PACKAGE_NAMES)
   cmake_parse_arguments(ARG
                         "${options}"
                         "${one_value_args}"
@@ -225,6 +225,9 @@ macro(resolve_dependency DEPENDENCY_NAME)
   if(ARG_USE_CONFIG)
     list(APPEND FIND_PACKAGE_ARGUMENTS CONFIG)
   endif()
+  if(ARG_COMPONENTS)
+    list(APPEND FIND_PACKAGE_ARGUMENTS COMPONENTS ${ARG_COMPONENTS})
+  endif()
   if(${DEPENDENCY_NAME}_SOURCE STREQUAL "AUTO")
     find_package(${FIND_PACKAGE_ARGUMENTS})
     if(${${PACKAGE_NAME}_FOUND})
@@ -260,8 +263,15 @@ endmacro()
 
 set(THIRDPARTY_DIR "${arrow_SOURCE_DIR}/thirdparty")
 
-# Include vendored Flatbuffers
-include_directories(SYSTEM "${THIRDPARTY_DIR}/flatbuffers/include")
+add_library(arrow::flatbuffers INTERFACE IMPORTED)
+if(CMAKE_VERSION VERSION_LESS 3.11)
+  set_target_properties(arrow::flatbuffers
+                        PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                                   "${THIRDPARTY_DIR}/flatbuffers/include")
+else()
+  target_include_directories(arrow::flatbuffers
+                             INTERFACE "${THIRDPARTY_DIR}/flatbuffers/include")
+endif()
 
 # ----------------------------------------------------------------------
 # Some EP's require other EP's
@@ -770,6 +780,7 @@ macro(build_boost)
 
   # This is needed by the thrift_ep build
   set(BOOST_ROOT ${BOOST_PREFIX})
+  set(Boost_INCLUDE_DIR "${BOOST_PREFIX}")
 
   if(ARROW_BOOST_REQUIRE_LIBRARY)
     set(BOOST_LIB_DIR "${BOOST_PREFIX}/stage/lib")
@@ -829,9 +840,16 @@ macro(build_boost)
     set(BOOST_BUILD_PRODUCTS ${BOOST_STATIC_SYSTEM_LIBRARY}
                              ${BOOST_STATIC_FILESYSTEM_LIBRARY})
 
-    add_thirdparty_lib(boost_system STATIC_LIB 
"${BOOST_STATIC_SYSTEM_LIBRARY}")
-
-    add_thirdparty_lib(boost_filesystem STATIC_LIB 
"${BOOST_STATIC_FILESYSTEM_LIBRARY}")
+    add_thirdparty_lib(Boost::system
+                       STATIC
+                       "${BOOST_STATIC_SYSTEM_LIBRARY}"
+                       INCLUDE_DIRECTORIES
+                       "${Boost_INCLUDE_DIR}")
+    add_thirdparty_lib(Boost::filesystem
+                       STATIC
+                       "${BOOST_STATIC_FILESYSTEM_LIBRARY}"
+                       INCLUDE_DIRECTORIES
+                       "${Boost_INCLUDE_DIR}")
 
     externalproject_add(boost_ep
                         URL ${BOOST_SOURCE_URL}
@@ -841,8 +859,8 @@ macro(build_boost)
                         CONFIGURE_COMMAND ${BOOST_CONFIGURE_COMMAND}
                         BUILD_COMMAND ${BOOST_BUILD_COMMAND}
                         INSTALL_COMMAND "" ${EP_LOG_OPTIONS})
-    add_dependencies(boost_system_static boost_ep)
-    add_dependencies(boost_filesystem_static boost_ep)
+    add_dependencies(Boost::system boost_ep)
+    add_dependencies(Boost::filesystem boost_ep)
   else()
     externalproject_add(boost_ep
                         ${EP_LOG_OPTIONS}
@@ -852,9 +870,27 @@ macro(build_boost)
                         URL ${BOOST_SOURCE_URL}
                         URL_HASH "SHA256=${ARROW_BOOST_BUILD_SHA256_CHECKSUM}")
   endif()
-  set(Boost_INCLUDE_DIR "${BOOST_PREFIX}")
-  set(Boost_INCLUDE_DIRS "${Boost_INCLUDE_DIR}")
-  add_dependencies(toolchain boost_ep)
+  add_library(Boost::headers INTERFACE IMPORTED)
+  if(CMAKE_VERSION VERSION_LESS 3.11)
+    set_target_properties(Boost::headers PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
+                                                    "${Boost_INCLUDE_DIR}")
+  else()
+    target_include_directories(Boost::headers INTERFACE "${Boost_INCLUDE_DIR}")
+  endif()
+  add_dependencies(Boost::headers boost_ep)
+  # If Boost is found but one of system or filesystem components aren't found,
+  # Boost::disable_autolinking and Boost::dynamic_linking are already defined.
+  if(NOT TARGET Boost::disable_autolinking)
+    add_library(Boost::disable_autolinking INTERFACE IMPORTED)
+    if(WIN32)
+      target_compile_definitions(Boost::disable_autolinking INTERFACE 
"BOOST_ALL_NO_LIB")
+    endif()
+  endif()
+  if(NOT TARGET Boost::dynamic_linking)
+    # This doesn't add BOOST_ALL_DYN_LINK because bundled Boost is a static 
library.
+    add_library(Boost::dynamic_linking INTERFACE IMPORTED)
+    add_dependencies(toolchain boost_ep)
+  endif()
   set(BOOST_VENDORED TRUE)
 endmacro()
 
@@ -954,43 +990,83 @@ if(ARROW_BUILD_INTEGRATION
    OR ARROW_BUILD_TESTS
    OR (ARROW_FLIGHT AND ARROW_BUILD_BENCHMARKS)
    OR (ARROW_S3 AND ARROW_BUILD_BENCHMARKS))
-  set(ARROW_BOOST_REQUIRED TRUE)
+  set(ARROW_USE_BOOST TRUE)
   set(ARROW_BOOST_REQUIRE_LIBRARY TRUE)
 elseif(ARROW_GANDIVA
        OR (ARROW_WITH_THRIFT AND THRIFT_REQUIRES_BOOST)
        OR (NOT ARROW_USE_NATIVE_INT128))
-  set(ARROW_BOOST_REQUIRED TRUE)
+  set(ARROW_USE_BOOST TRUE)
   set(ARROW_BOOST_REQUIRE_LIBRARY FALSE)
 else()
-  set(ARROW_BOOST_REQUIRED FALSE)
+  set(ARROW_USE_BOOST FALSE)
 endif()
 
-if(ARROW_BOOST_REQUIRED)
+if(ARROW_USE_BOOST)
+  if(ARROW_BOOST_USE_SHARED)
+    # Find shared Boost libraries.
+    set(Boost_USE_STATIC_LIBS OFF)
+    set(BUILD_SHARED_LIBS_KEEP ${BUILD_SHARED_LIBS})
+    set(BUILD_SHARED_LIBS ON)
+  else()
+    # Find static boost headers and libs
+    set(Boost_USE_STATIC_LIBS ON)
+  endif()
   resolve_dependency(Boost
-                     HAVE_ALT
-                     TRUE
                      REQUIRED_VERSION
                      ${ARROW_BOOST_REQUIRED_VERSION}
+                     COMPONENTS
+                     system
+                     filesystem
                      IS_RUNTIME_DEPENDENCY
                      # libarrow.so doesn't depend on libboost*.
                      FALSE)
+  if(ARROW_BOOST_USE_SHARED)
+    set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_KEEP})
+    unset(BUILD_SHARED_LIBS_KEEP)
+  endif()
 
-  if(TARGET Boost::system)
-    set(BOOST_SYSTEM_LIBRARY Boost::system)
-    set(BOOST_FILESYSTEM_LIBRARY Boost::filesystem)
-  elseif(BoostAlt_FOUND)
-    set(BOOST_SYSTEM_LIBRARY ${Boost_SYSTEM_LIBRARY})
-    set(BOOST_FILESYSTEM_LIBRARY ${Boost_FILESYSTEM_LIBRARY})
-  else()
-    set(BOOST_SYSTEM_LIBRARY boost_system_static)
-    set(BOOST_FILESYSTEM_LIBRARY boost_filesystem_static)
+  # For CMake < 3.15
+  if(NOT TARGET Boost::headers)
+    add_library(Boost::headers INTERFACE IMPORTED)
+    if(CMAKE_VERSION VERSION_LESS 3.11)
+      set_target_properties(Boost::headers PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
+                                                      "${Boost_INCLUDE_DIR}")
+    else()
+      target_include_directories(Boost::headers INTERFACE 
"${Boost_INCLUDE_DIR}")
+    endif()
   endif()
-  set(ARROW_BOOST_LIBS ${BOOST_SYSTEM_LIBRARY} ${BOOST_FILESYSTEM_LIBRARY})
 
-  message(STATUS "Boost include dir: ${Boost_INCLUDE_DIR}")
-  message(STATUS "Boost libraries: ${ARROW_BOOST_LIBS}")
+  foreach(BOOST_LIBRARY Boost::headers Boost::filesystem Boost::system)
+    if(NOT TARGET ${BOOST_LIBRARY})
+      continue()
+    endif()
+    if(CMAKE_VERSION VERSION_LESS 3.11)
+      set_target_properties(${BOOST_LIBRARY} PROPERTIES 
INTERFACE_LINK_LIBRARIES
+                                                        
Boost::disable_autolinking)
+    else()
+      target_link_libraries(${BOOST_LIBRARY} INTERFACE 
Boost::disable_autolinking)
+    endif()
+    if(ARROW_BOOST_USE_SHARED)
+      if(CMAKE_VERSION VERSION_LESS 3.11)
+        set_target_properties(${BOOST_LIBRARY} PROPERTIES 
INTERFACE_LINK_LIBRARIES
+                                                          
Boost::dynamic_linking)
+      else()
+        target_link_libraries(${BOOST_LIBRARY} INTERFACE 
Boost::dynamic_linking)
+      endif()
+    endif()
+  endforeach()
 
-  include_directories(SYSTEM ${Boost_INCLUDE_DIR})
+  if(WIN32 AND CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
+    # boost/process/detail/windows/handle_workaround.hpp doesn't work
+    # without BOOST_USE_WINDOWS_H with MinGW because MinGW doesn't
+    # provide __kernel_entry without winternl.h.
+    #
+    # See also:
+    # 
https://github.com/boostorg/process/blob/develop/include/boost/process/detail/windows/handle_workaround.hpp
+    target_compile_definitions(Boost::headers INTERFACE 
"BOOST_USE_WINDOWS_H=1")
+  endif()
+
+  message(STATUS "Boost include dir: ${Boost_INCLUDE_DIR}")
 endif()
 
 # ----------------------------------------------------------------------
@@ -1056,9 +1132,6 @@ if(ARROW_WITH_SNAPPY)
     get_target_property(SNAPPY_LIB Snappy::snappy IMPORTED_LOCATION)
     string(APPEND ARROW_PC_LIBS_PRIVATE " ${SNAPPY_LIB}")
   endif()
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(SNAPPY_INCLUDE_DIRS Snappy::snappy 
INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${SNAPPY_INCLUDE_DIRS})
 endif()
 
 # ----------------------------------------------------------------------
@@ -1122,10 +1195,6 @@ endmacro()
 
 if(ARROW_WITH_BROTLI)
   resolve_dependency(Brotli PC_PACKAGE_NAMES libbrotlidec libbrotlienc)
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(BROTLI_INCLUDE_DIR Brotli::brotlicommon
-                      INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${BROTLI_INCLUDE_DIR})
 endif()
 
 if(PARQUET_REQUIRE_ENCRYPTION AND NOT ARROW_PARQUET)
@@ -1177,9 +1246,7 @@ if(ARROW_USE_OPENSSL)
   message(STATUS "Found OpenSSL Crypto Library: ${OPENSSL_CRYPTO_LIBRARY}")
   message(STATUS "Building with OpenSSL (Version: ${OPENSSL_VERSION}) support")
 
-  list(APPEND ARROW_SYSTEM_DEPENDENCIES "OpenSSL")
-
-  include_directories(SYSTEM ${OPENSSL_INCLUDE_DIR})
+  list(APPEND ARROW_SYSTEM_DEPENDENCIES OpenSSL)
 else()
   message(STATUS "Building without OpenSSL support. Minimum OpenSSL version 
${ARROW_OPENSSL_REQUIRED_VERSION} required."
   )
@@ -1242,9 +1309,6 @@ endmacro()
 
 if(ARROW_USE_GLOG)
   resolve_dependency(GLOG PC_PACKAGE_NAMES libglog)
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(GLOG_INCLUDE_DIR glog::glog 
INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${GLOG_INCLUDE_DIR})
 endif()
 
 # ----------------------------------------------------------------------
@@ -1296,8 +1360,8 @@ macro(build_gflags)
 
   add_dependencies(toolchain gflags_ep)
 
-  add_thirdparty_lib(gflags STATIC_LIB ${GFLAGS_STATIC_LIB})
-  set(GFLAGS_LIBRARY gflags_static)
+  add_thirdparty_lib(gflags::gflags_static STATIC ${GFLAGS_STATIC_LIB})
+  set(GFLAGS_LIBRARY gflags::gflags_static)
   set_target_properties(${GFLAGS_LIBRARY}
                         PROPERTIES INTERFACE_COMPILE_DEFINITIONS 
"GFLAGS_IS_A_DLL=0"
                                    INTERFACE_INCLUDE_DIRECTORIES 
"${GFLAGS_INCLUDE_DIR}")
@@ -1309,7 +1373,7 @@ macro(build_gflags)
 
   set(GFLAGS_VENDORED TRUE)
 
-  list(APPEND ARROW_BUNDLED_STATIC_LIBS gflags_static)
+  list(APPEND ARROW_BUNDLED_STATIC_LIBS gflags::gflags_static)
 endmacro()
 
 if(ARROW_NEED_GFLAGS)
@@ -1321,11 +1385,11 @@ if(ARROW_NEED_GFLAGS)
                      ${ARROW_GFLAGS_REQUIRED_VERSION}
                      IS_RUNTIME_DEPENDENCY
                      FALSE)
-  # TODO: Don't use global includes but rather target_include_directories
-  include_directories(SYSTEM ${GFLAGS_INCLUDE_DIR})
 
   if(NOT TARGET ${GFLAGS_LIBRARIES})
-    if(TARGET gflags-shared)
+    if(TARGET gflags::gflags_shared)
+      set(GFLAGS_LIBRARIES gflags::gflags_shared)
+    elseif(TARGET gflags-shared)
       set(GFLAGS_LIBRARIES gflags-shared)
     elseif(TARGET gflags_shared)
       set(GFLAGS_LIBRARIES gflags_shared)
@@ -1405,6 +1469,12 @@ macro(build_thrift)
   set_target_properties(thrift::thrift
                         PROPERTIES IMPORTED_LOCATION "${THRIFT_STATIC_LIB}"
                                    INTERFACE_INCLUDE_DIRECTORIES 
"${THRIFT_INCLUDE_DIR}")
+  if(CMAKE_VERSION VERSION_LESS 3.11)
+    set_target_properties(${BOOST_LIBRARY} PROPERTIES INTERFACE_LINK_LIBRARIES
+                                                      Boost::headers)
+  else()
+    target_link_libraries(thrift::thrift INTERFACE Boost::headers)
+  endif()
   add_dependencies(toolchain thrift_ep)
   add_dependencies(thrift::thrift thrift_ep)
   set(THRIFT_VERSION ${ARROW_THRIFT_BUILD_VERSION})
@@ -1423,8 +1493,6 @@ if(ARROW_WITH_THRIFT)
                        PC_PACKAGE_NAMES
                        thrift)
   endif()
-  # TODO: Don't use global includes but rather target_include_directories
-  include_directories(SYSTEM ${THRIFT_INCLUDE_DIR})
 
   string(REPLACE "." ";" VERSION_LIST ${THRIFT_VERSION})
   list(GET VERSION_LIST 0 THRIFT_VERSION_MAJOR)
@@ -1512,6 +1580,8 @@ macro(build_protobuf)
                       URL_HASH 
"SHA256=${ARROW_PROTOBUF_BUILD_SHA256_CHECKSUM}")
 
   file(MAKE_DIRECTORY "${PROTOBUF_INCLUDE_DIR}")
+  # For compatibility of CMake's FindProtobuf.cmake.
+  set(Protobuf_INCLUDE_DIRS "${PROTOBUF_INCLUDE_DIR}")
 
   add_library(arrow::protobuf::libprotobuf STATIC IMPORTED)
   set_target_properties(arrow::protobuf::libprotobuf
@@ -1558,9 +1628,6 @@ if(ARROW_WITH_PROTOBUF)
     add_definitions(-DPROTOBUF_USE_DLLS)
   endif()
 
-  # TODO: Don't use global includes but rather target_include_directories
-  include_directories(SYSTEM ${PROTOBUF_INCLUDE_DIR})
-
   if(TARGET arrow::protobuf::libprotobuf)
     set(ARROW_PROTOBUF_LIBPROTOBUF arrow::protobuf::libprotobuf)
   else()
@@ -1760,15 +1827,15 @@ if(ARROW_JEMALLOC)
 
   # Don't use the include directory directly so that we can point to a path
   # that is unique to our codebase.
-  include_directories(SYSTEM 
"${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
+  set(JEMALLOC_INCLUDE_DIR 
"${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
   # The include directory must exist before it is referenced by a target.
-  file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src/")
+  file(MAKE_DIRECTORY "${JEMALLOC_INCLUDE_DIR}")
   add_library(jemalloc::jemalloc STATIC IMPORTED)
   set_target_properties(jemalloc::jemalloc
                         PROPERTIES INTERFACE_LINK_LIBRARIES Threads::Threads
                                    IMPORTED_LOCATION "${JEMALLOC_STATIC_LIB}"
                                    INTERFACE_INCLUDE_DIRECTORIES
-                                   
"${CMAKE_CURRENT_BINARY_DIR}/jemalloc_ep-prefix/src")
+                                   "${JEMALLOC_INCLUDE_DIR}")
   add_dependencies(jemalloc::jemalloc jemalloc_ep)
 
   list(APPEND ARROW_BUNDLED_STATIC_LIBS jemalloc::jemalloc)
@@ -1810,7 +1877,6 @@ if(ARROW_MIMALLOC)
                       CMAKE_ARGS ${MIMALLOC_CMAKE_ARGS}
                       BUILD_BYPRODUCTS "${MIMALLOC_STATIC_LIB}")
 
-  include_directories(SYSTEM ${MIMALLOC_INCLUDE_DIR})
   file(MAKE_DIRECTORY ${MIMALLOC_INCLUDE_DIR})
 
   add_library(mimalloc::mimalloc STATIC IMPORTED)
@@ -2003,10 +2069,6 @@ if(ARROW_TESTING)
     #     endif()
     #     set(CMAKE_REQUIRED_LIBRARIES)
   endif()
-
-  get_target_property(GTEST_INCLUDE_DIR GTest::gtest 
INTERFACE_INCLUDE_DIRECTORIES)
-  # TODO: Don't use global includes but rather target_include_directories
-  include_directories(SYSTEM ${GTEST_INCLUDE_DIR})
 endif()
 
 macro(build_benchmark)
@@ -2077,10 +2139,6 @@ if(ARROW_BUILD_BENCHMARKS)
                      ${BENCHMARK_REQUIRED_VERSION}
                      IS_RUNTIME_DEPENDENCY
                      FALSE)
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(BENCHMARK_INCLUDE_DIR benchmark::benchmark
-                      INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${BENCHMARK_INCLUDE_DIR})
 endif()
 
 macro(build_rapidjson)
@@ -2102,6 +2160,8 @@ macro(build_rapidjson)
                       CMAKE_ARGS ${RAPIDJSON_CMAKE_ARGS})
 
   set(RAPIDJSON_INCLUDE_DIR "${RAPIDJSON_PREFIX}/include")
+  # The include directory must exist before it is referenced by a target.
+  file(MAKE_DIRECTORY "${RAPIDJSON_INCLUDE_DIR}")
 
   add_dependencies(toolchain rapidjson_ep)
   add_dependencies(toolchain-tests rapidjson_ep)
@@ -2123,9 +2183,20 @@ if(ARROW_WITH_RAPIDJSON)
   if(RapidJSON_INCLUDE_DIR)
     set(RAPIDJSON_INCLUDE_DIR "${RapidJSON_INCLUDE_DIR}")
   endif()
+  if(WIN32 AND "${RAPIDJSON_INCLUDE_DIR}" MATCHES "^/")
+    # MSYS2
+    execute_process(COMMAND "cygpath" "--windows" "${RAPIDJSON_INCLUDE_DIR}"
+                    OUTPUT_VARIABLE RAPIDJSON_INCLUDE_DIR
+                    OUTPUT_STRIP_TRAILING_WHITESPACE)
+  endif()
 
-  # TODO: Don't use global includes but rather target_include_directories
-  include_directories(SYSTEM ${RAPIDJSON_INCLUDE_DIR})
+  add_library(rapidjson::rapidjson INTERFACE IMPORTED)
+  if(CMAKE_VERSION VERSION_LESS 3.11)
+    set_target_properties(rapidjson::rapidjson PROPERTIES 
INTERFACE_INCLUDE_DIRECTORIES
+                                                          
"${RAPIDJSON_INCLUDE_DIR}")
+  else()
+    target_include_directories(rapidjson::rapidjson INTERFACE 
"${RAPIDJSON_INCLUDE_DIR}")
+  endif()
 endif()
 
 macro(build_xsimd)
@@ -2141,6 +2212,8 @@ macro(build_xsimd)
                       CMAKE_ARGS ${XSIMD_CMAKE_ARGS})
 
   set(XSIMD_INCLUDE_DIR "${XSIMD_PREFIX}/include")
+  # The include directory must exist before it is referenced by a target.
+  file(MAKE_DIRECTORY "${XSIMD_INCLUDE_DIR}")
 
   add_dependencies(toolchain xsimd_ep)
   add_dependencies(toolchain-tests xsimd_ep)
@@ -2150,10 +2223,21 @@ endmacro()
 
 if((NOT ARROW_SIMD_LEVEL STREQUAL "NONE") OR (NOT ARROW_RUNTIME_SIMD_LEVEL 
STREQUAL "NONE"
                                              ))
+  set(ARROW_USE_XSIMD TRUE)
+else()
+  set(ARROW_USE_XSIMD FALSE)
+endif()
+if(ARROW_USE_XSIMD)
   set(xsimd_SOURCE "BUNDLED")
   resolve_dependency(xsimd)
-  # TODO: Don't use global includes but rather target_include_directories
-  include_directories(SYSTEM ${XSIMD_INCLUDE_DIR})
+
+  add_library(xsimd INTERFACE IMPORTED)
+  if(CMAKE_VERSION VERSION_LESS 3.11)
+    set_target_properties(xsimd PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                                           "${XSIMD_INCLUDE_DIR}")
+  else()
+    target_include_directories(xsimd INTERFACE "${XSIMD_INCLUDE_DIR}")
+  endif()
 endif()
 
 macro(build_zlib)
@@ -2195,10 +2279,6 @@ endmacro()
 
 if(ARROW_WITH_ZLIB)
   resolve_dependency(ZLIB PC_PACKAGE_NAMES zlib)
-
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(ZLIB_INCLUDE_DIR ZLIB::ZLIB 
INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${ZLIB_INCLUDE_DIR})
 endif()
 
 macro(build_lz4)
@@ -2253,10 +2333,6 @@ endmacro()
 
 if(ARROW_WITH_LZ4)
   resolve_dependency(Lz4 PC_PACKAGE_NAMES liblz4)
-
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(LZ4_INCLUDE_DIR LZ4::lz4 INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${LZ4_INCLUDE_DIR})
 endif()
 
 macro(build_zstd)
@@ -2339,11 +2415,6 @@ if(ARROW_WITH_ZSTD)
       endif()
     endif()
   endif()
-
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(ZSTD_INCLUDE_DIR ${ARROW_ZSTD_LIBZSTD}
-                      INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${ZSTD_INCLUDE_DIR})
 endif()
 
 # ----------------------------------------------------------------------
@@ -2399,10 +2470,6 @@ if(ARROW_WITH_RE2)
     string(APPEND ARROW_PC_LIBS_PRIVATE " ${RE2_LIB}")
   endif()
   add_definitions(-DARROW_WITH_RE2)
-
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(RE2_INCLUDE_DIR re2::re2 INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${RE2_INCLUDE_DIR})
 endif()
 
 macro(build_bzip2)
@@ -2465,7 +2532,6 @@ if(ARROW_WITH_BZ2)
                           PROPERTIES IMPORTED_LOCATION "${BZIP2_LIBRARIES}"
                                      INTERFACE_INCLUDE_DIRECTORIES 
"${BZIP2_INCLUDE_DIR}")
   endif()
-  include_directories(SYSTEM "${BZIP2_INCLUDE_DIR}")
 endif()
 
 macro(build_utf8proc)
@@ -2498,7 +2564,7 @@ macro(build_utf8proc)
   add_library(utf8proc::utf8proc STATIC IMPORTED)
   set_target_properties(utf8proc::utf8proc
                         PROPERTIES IMPORTED_LOCATION "${UTF8PROC_STATIC_LIB}"
-                                   INTERFACE_COMPILER_DEFINITIONS 
"UTF8PROC_STATIC"
+                                   INTERFACE_COMPILE_DEFINITIONS 
"UTF8PROC_STATIC"
                                    INTERFACE_INCLUDE_DIRECTORIES
                                    "${UTF8PROC_PREFIX}/include")
 
@@ -2514,22 +2580,7 @@ if(ARROW_WITH_UTF8PROC)
                      "2.2.0"
                      PC_PACKAGE_NAMES
                      libutf8proc)
-
   add_definitions(-DARROW_WITH_UTF8PROC)
-
-  # TODO: Don't use global definitions but rather
-  # target_compile_definitions or target_link_libraries
-  get_target_property(UTF8PROC_COMPILER_DEFINITIONS utf8proc::utf8proc
-                      INTERFACE_COMPILER_DEFINITIONS)
-  if(UTF8PROC_COMPILER_DEFINITIONS)
-    add_definitions(-D${UTF8PROC_COMPILER_DEFINITIONS})
-  endif()
-
-  # TODO: Don't use global includes but rather
-  # target_include_directories or target_link_libraries
-  get_target_property(UTF8PROC_INCLUDE_DIR utf8proc::utf8proc
-                      INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${UTF8PROC_INCLUDE_DIR})
 endif()
 
 macro(build_cares)
@@ -3450,9 +3501,6 @@ macro(build_grpc)
                      TRUE
                      PC_PACKAGE_NAMES
                      libcares)
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(c-ares_INCLUDE_DIR c-ares::cares 
INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${c-ares_INCLUDE_DIR})
 
   # First need Abseil
   resolve_dependency_absl()
@@ -3708,10 +3756,6 @@ if(ARROW_WITH_GRPC)
                      PC_PACKAGE_NAMES
                      grpc++)
 
-  # TODO: Don't use global includes but rather target_include_directories
-  get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++ 
INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${GRPC_INCLUDE_DIR})
-
   if(GRPC_VENDORED)
     set(GRPCPP_PP_INCLUDE TRUE)
     # Examples need to link to static Arrow if we're using static gRPC
@@ -3719,6 +3763,7 @@ if(ARROW_WITH_GRPC)
   else()
     # grpc++ headers may reside in ${GRPC_INCLUDE_DIR}/grpc++ or 
${GRPC_INCLUDE_DIR}/grpcpp
     # depending on the gRPC version.
+    get_target_property(GRPC_INCLUDE_DIR gRPC::grpc++ 
INTERFACE_INCLUDE_DIRECTORIES)
     if(EXISTS "${GRPC_INCLUDE_DIR}/grpcpp/impl/codegen/config_protobuf.h")
       set(GRPCPP_PP_INCLUDE TRUE)
     elseif(EXISTS "${GRPC_INCLUDE_DIR}/grpc++/impl/codegen/config_protobuf.h")
@@ -3802,7 +3847,6 @@ if(ARROW_WITH_NLOHMANN_JSON)
   resolve_dependency(nlohmann_json)
   get_target_property(nlohmann_json_INCLUDE_DIR nlohmann_json::nlohmann_json
                       INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${nlohmann_json_INCLUDE_DIR})
   message(STATUS "Found nlohmann_json headers: ${nlohmann_json_INCLUDE_DIR}")
 endif()
 
@@ -3932,9 +3976,6 @@ if(ARROW_WITH_GOOGLE_CLOUD_CPP)
   resolve_dependency(google_cloud_cpp_storage)
   get_target_property(google_cloud_cpp_storage_INCLUDE_DIR 
google-cloud-cpp::storage
                       INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${google_cloud_cpp_storage_INCLUDE_DIR})
-  get_target_property(absl_base_INCLUDE_DIR absl::base 
INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${absl_base_INCLUDE_DIR})
   message(STATUS "Found google-cloud-cpp::storage headers: 
${google_cloud_cpp_storage_INCLUDE_DIR}"
   )
 endif()
@@ -3956,9 +3997,15 @@ set(HDFS_H_PATH "${HADOOP_HOME}/include/hdfs.h")
 if(NOT EXISTS ${HDFS_H_PATH})
   message(FATAL_ERROR "Did not find hdfs.h at ${HDFS_H_PATH}")
 endif()
-message(STATUS "Found hdfs.h at: " ${HDFS_H_PATH})
+message(STATUS "Found hdfs.h at: ${HDFS_H_PATH}")
 
-include_directories(SYSTEM "${HADOOP_HOME}/include")
+add_library(arrow::hadoop INTERFACE IMPORTED)
+if(CMAKE_VERSION VERSION_LESS 3.11)
+  set_target_properties(arrow::hadoop PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
+                                                 "${HADOOP_HOME}/include")
+else()
+  target_include_directories(arrow::hadoop INTERFACE "${HADOOP_HOME}/include")
+endif()
 
 # ----------------------------------------------------------------------
 # Apache ORC
@@ -4043,7 +4090,6 @@ endmacro()
 
 if(ARROW_ORC)
   resolve_dependency(ORC)
-  include_directories(SYSTEM ${ORC_INCLUDE_DIR})
   message(STATUS "Found ORC static library: ${ORC_STATIC_LIB}")
   message(STATUS "Found ORC headers: ${ORC_INCLUDE_DIR}")
 endif()
@@ -4260,7 +4306,6 @@ if(ARROW_WITH_OPENTELEMETRY)
   resolve_dependency(opentelemetry-cpp)
   get_target_property(OPENTELEMETRY_INCLUDE_DIR opentelemetry-cpp::api
                       INTERFACE_INCLUDE_DIRECTORIES)
-  include_directories(SYSTEM ${OPENTELEMETRY_INCLUDE_DIR})
   message(STATUS "Found OpenTelemetry headers: ${OPENTELEMETRY_INCLUDE_DIR}")
 endif()
 
@@ -4486,7 +4531,6 @@ if(ARROW_S3)
     endif()
   endif()
 
-  include_directories(SYSTEM ${AWSSDK_INCLUDE_DIR})
   message(STATUS "Found AWS SDK headers: ${AWSSDK_INCLUDE_DIR}")
   message(STATUS "Found AWS SDK libraries: ${AWSSDK_LINK_LIBRARIES}")
 
diff --git a/cpp/examples/parquet/parquet_arrow/CMakeLists.txt 
b/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
index eb5bb86917..32f980060c 100644
--- a/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
+++ b/cpp/examples/parquet/parquet_arrow/CMakeLists.txt
@@ -38,7 +38,5 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
 find_package(Arrow REQUIRED)
 find_package(Parquet REQUIRED)
 
-include_directories(SYSTEM ${ARROW_INCLUDE_DIR} ${PARQUET_INCLUDE_DIR})
-
 add_executable(parquet-arrow-example reader_writer.cc)
-target_link_libraries(parquet-arrow-example ${PARQUET_SHARED_LIB} 
${ARROW_SHARED_LIB})
+target_link_libraries(parquet-arrow-example parquet_shared arrow_shared)
diff --git a/cpp/src/arrow/CMakeLists.txt b/cpp/src/arrow/CMakeLists.txt
index 690c51a4a6..3b49f4ca00 100644
--- a/cpp/src/arrow/CMakeLists.txt
+++ b/cpp/src/arrow/CMakeLists.txt
@@ -622,10 +622,15 @@ if(ARROW_TESTING)
                 DEPENDENCIES
                 arrow_test_dependencies
                 SHARED_LINK_LIBS
+                arrow::flatbuffers
+                rapidjson::rapidjson
                 arrow_shared
                 GTest::gtest
                 STATIC_LINK_LIBS
-                arrow_static)
+                arrow::flatbuffers
+                rapidjson::rapidjson
+                arrow_static
+                GTest::gtest)
 
   add_custom_target(arrow_testing)
   add_dependencies(arrow_testing ${ARROW_TESTING_LIBRARIES})
diff --git a/cpp/src/arrow/dataset/CMakeLists.txt 
b/cpp/src/arrow/dataset/CMakeLists.txt
index 6aa4794a3f..478c13691b 100644
--- a/cpp/src/arrow/dataset/CMakeLists.txt
+++ b/cpp/src/arrow/dataset/CMakeLists.txt
@@ -30,7 +30,7 @@ set(ARROW_DATASET_SRCS
     projector.cc
     scanner.cc)
 
-set(ARROW_DATASET_LINK_STATIC arrow_static)
+set(ARROW_DATASET_LINK_STATIC arrow_static ${ARROW_STATIC_LINK_LIBS})
 set(ARROW_DATASET_LINK_SHARED arrow_shared)
 
 if(ARROW_CSV)
diff --git a/cpp/src/arrow/filesystem/CMakeLists.txt 
b/cpp/src/arrow/filesystem/CMakeLists.txt
index c301a57bad..44b71ed27f 100644
--- a/cpp/src/arrow/filesystem/CMakeLists.txt
+++ b/cpp/src/arrow/filesystem/CMakeLists.txt
@@ -40,7 +40,7 @@ if(ARROW_S3)
                  EXTRA_LABELS
                  filesystem)
   if(TARGET arrow-s3fs-test)
-    set(ARROW_S3FS_TEST_COMPILE_DEFINITIONS 
${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
+    set(ARROW_S3FS_TEST_COMPILE_DEFINITIONS)
     get_target_property(AWS_CPP_SDK_S3_TYPE aws-cpp-sdk-s3 TYPE)
     # We need to initialize AWS C++ SDK for direct use (not via
     # arrow::fs::S3FileSystem) in arrow-s3fs-test if we use static AWS
@@ -74,8 +74,6 @@ if(ARROW_S3)
                         SOURCES
                         s3fs_benchmark.cc
                         s3_test_util.cc)
-    target_compile_definitions(arrow-filesystem-s3fs-benchmark
-                               PRIVATE 
${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
     if(ARROW_TEST_LINKAGE STREQUAL "static")
       target_link_libraries(arrow-filesystem-s3fs-benchmark PRIVATE 
parquet_static)
     else()
diff --git a/cpp/src/arrow/flight/CMakeLists.txt 
b/cpp/src/arrow/flight/CMakeLists.txt
index f9d135654b..c09159eb15 100644
--- a/cpp/src/arrow/flight/CMakeLists.txt
+++ b/cpp/src/arrow/flight/CMakeLists.txt
@@ -58,6 +58,13 @@ else()
     list(APPEND ARROW_FLIGHT_TEST_LINK_LIBS arrow_cuda_shared)
   endif()
 endif()
+list(APPEND
+     ARROW_FLIGHT_TEST_INTERFACE_LIBS
+     Boost::headers
+     Boost::filesystem
+     Boost::system
+     GTest::gtest
+     GTest::gmock)
 
 # Needed for Flight SQL and integration
 set(ARROW_FLIGHT_TEST_LINK_LIBS
@@ -250,22 +257,19 @@ if(ARROW_TESTING)
                 arrow_shared
                 arrow_flight_shared
                 arrow_testing_shared
-                ${BOOST_FILESYSTEM_LIBRARY}
-                ${BOOST_SYSTEM_LIBRARY}
-                GTest::gtest
                 ${ARROW_FLIGHT_TEST_INTERFACE_LIBS}
                 STATIC_LINK_LIBS
                 arrow_static
                 arrow_flight_static
                 arrow_testing_static
-                ${ARROW_FLIGHT_TEST_INTERFACE_LIBS})
-endif()
+                ${ARROW_FLIGHT_TEST_INTERFACE_LIBS}
+                PRIVATE_INCLUDES
+                "${Protobuf_INCLUDE_DIRS}")
 
-foreach(LIB_TARGET ${ARROW_FLIGHT_TESTING_LIBRARIES})
-  target_compile_definitions(${LIB_TARGET}
-                             PRIVATE ARROW_FLIGHT_EXPORTING
-                                     
${ARROW_BOOST_PROCESS_COMPILE_DEFINITIONS})
-endforeach()
+  foreach(LIB_TARGET ${ARROW_FLIGHT_TESTING_LIBRARIES})
+    target_compile_definitions(${LIB_TARGET} PRIVATE ARROW_FLIGHT_EXPORTING)
+  endforeach()
+endif()
 
 add_arrow_test(flight_internals_test
                STATIC_LINK_LIBS
diff --git a/cpp/src/arrow/flight/sql/CMakeLists.txt 
b/cpp/src/arrow/flight/sql/CMakeLists.txt
index 6efe6e76bf..6a3c922210 100644
--- a/cpp/src/arrow/flight/sql/CMakeLists.txt
+++ b/cpp/src/arrow/flight/sql/CMakeLists.txt
@@ -59,7 +59,9 @@ add_arrow_lib(arrow_flight_sql
               SHARED_LINK_LIBS
               arrow_flight_shared
               STATIC_LINK_LIBS
-              arrow_flight_static)
+              arrow_flight_static
+              PRIVATE_INCLUDES
+              "${Protobuf_INCLUDE_DIRS}")
 
 if(ARROW_FLIGHT_TEST_LINKAGE STREQUAL "static")
   set(ARROW_FLIGHT_SQL_TEST_LINK_LIBS arrow_flight_sql_static
diff --git a/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt 
b/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
index 6e315b68d6..8e28c105b4 100644
--- a/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
+++ b/cpp/src/arrow/flight/transport/ucx/CMakeLists.txt
@@ -29,7 +29,6 @@ set(ARROW_FLIGHT_TRANSPORT_UCX_SRCS
     util_internal.cc)
 set(ARROW_FLIGHT_TRANSPORT_UCX_LINK_LIBS)
 
-include_directories(SYSTEM ${UCX_INCLUDE_DIRS})
 list(APPEND ARROW_FLIGHT_TRANSPORT_UCX_LINK_LIBS PkgConfig::UCX)
 
 add_arrow_lib(arrow_flight_transport_ucx
diff --git a/cpp/src/arrow/gpu/CMakeLists.txt b/cpp/src/arrow/gpu/CMakeLists.txt
index 7a66622f84..934a11f810 100644
--- a/cpp/src/arrow/gpu/CMakeLists.txt
+++ b/cpp/src/arrow/gpu/CMakeLists.txt
@@ -29,6 +29,7 @@ if(DEFINED ENV{CUDA_HOME})
   set(CUDA_TOOLKIT_ROOT_DIR "$ENV{CUDA_HOME}")
 endif()
 
+set(ARROW_CUDA_LINK_LIBS arrow::flatbuffers)
 if(CMAKE_VERSION VERSION_LESS 3.17)
   find_package(CUDA REQUIRED)
   set(ARROW_CUDA_SHARED_LINK_LIBS ${CUDA_CUDA_LIBRARY})
@@ -39,7 +40,6 @@ else()
   # CUDAToolkit is only available in CMake >= 3.17
   find_package(CUDAToolkit REQUIRED)
   set(ARROW_CUDA_SHARED_LINK_LIBS CUDA::cuda_driver)
-  include_directories(SYSTEM ${CUDAToolkit_INCLUDE_DIRS})
 endif()
 
 set(ARROW_CUDA_SRCS cuda_arrow_ipc.cc cuda_context.cc cuda_internal.cc 
cuda_memory.cc)
@@ -57,9 +57,11 @@ add_arrow_lib(arrow_cuda
               ${ARROW_VERSION_SCRIPT_FLAGS} # Defined in 
cpp/arrow/CMakeLists.txt
               SHARED_LINK_LIBS
               arrow_shared
+              ${ARROW_CUDA_LINK_LIBS}
               ${ARROW_CUDA_SHARED_LINK_LIBS}
               # Static arrow_cuda must also link against CUDA shared libs
               STATIC_LINK_LIBS
+              ${ARROW_CUDA_LINK_LIBS}
               ${ARROW_CUDA_SHARED_LINK_LIBS})
 
 add_dependencies(arrow_cuda ${ARROW_CUDA_LIBRARIES})
diff --git a/cpp/src/arrow/python/CMakeLists.txt 
b/cpp/src/arrow/python/CMakeLists.txt
index 34dea64df5..c37240a426 100644
--- a/cpp/src/arrow/python/CMakeLists.txt
+++ b/cpp/src/arrow/python/CMakeLists.txt
@@ -71,13 +71,19 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "AppleClang" OR 
CMAKE_CXX_COMPILER_ID STREQUAL
 endif()
 
 set(ARROW_PYTHON_SHARED_LINK_LIBS arrow_shared)
+set(ARROW_PYTHON_SHARED_PRIVATE_LINK_LIBS)
+set(ARROW_PYTHON_STATIC_LINK_LIBS ${PYTHON_OTHER_LIBS})
+
 if(WIN32)
   list(APPEND ARROW_PYTHON_SHARED_LINK_LIBS ${PYTHON_LIBRARIES} 
${PYTHON_OTHER_LIBS})
 endif()
-
 if(PARQUET_REQUIRE_ENCRYPTION)
   list(APPEND ARROW_PYTHON_SHARED_LINK_LIBS parquet_shared)
 endif()
+if(ARROW_USE_XSIMD)
+  list(APPEND ARROW_PYTHON_SHARED_PRIVATE_LINK_LIBS xsimd)
+  list(APPEND ARROW_PYTHON_STATIC_LINK_LIBS xsimd)
+endif()
 
 set(ARROW_PYTHON_INCLUDES ${NUMPY_INCLUDE_DIRS} ${PYTHON_INCLUDE_DIRS})
 
@@ -98,8 +104,10 @@ add_arrow_lib(arrow_python
               ${ARROW_VERSION_SCRIPT_FLAGS} # Defined in 
cpp/arrow/CMakeLists.txt
               SHARED_LINK_LIBS
               ${ARROW_PYTHON_SHARED_LINK_LIBS}
+              SHARED_PRIVATE_LINK_LIBS
+              ${ARROW_PYTHON_SHARED_PRIVATE_LINK_LIBS}
               STATIC_LINK_LIBS
-              ${PYTHON_OTHER_LIBS}
+              ${ARROW_PYTHON_STATIC_LINK_LIBS}
               EXTRA_INCLUDES
               "${ARROW_PYTHON_INCLUDES}")
 
@@ -138,7 +146,9 @@ if(ARROW_FLIGHT AND ARROW_BUILD_SHARED)
                 STATIC_LINK_LIBS
                 ${PYTHON_OTHER_LIBS}
                 EXTRA_INCLUDES
-                "${ARROW_PYTHON_INCLUDES}")
+                "${ARROW_PYTHON_INCLUDES}"
+                PRIVATE_INCLUDES
+                "${Protobuf_INCLUDE_DIRS}")
 
   add_dependencies(arrow_python ${ARROW_PYFLIGHT_LIBRARIES})
 
diff --git a/cpp/src/gandiva/CMakeLists.txt b/cpp/src/gandiva/CMakeLists.txt
index 46e819ccc6..56c416ffb4 100644
--- a/cpp/src/gandiva/CMakeLists.txt
+++ b/cpp/src/gandiva/CMakeLists.txt
@@ -98,9 +98,21 @@ set(SRC_FILES
     ${GANDIVA_PRECOMPILED_CC_PATH})
 
 set(GANDIVA_SHARED_PRIVATE_LINK_LIBS arrow_shared LLVM::LLVM_INTERFACE
-                                     ${GANDIVA_OPENSSL_LIBS})
-
-set(GANDIVA_STATIC_LINK_LIBS arrow_static LLVM::LLVM_INTERFACE 
${GANDIVA_OPENSSL_LIBS})
+                                     ${GANDIVA_OPENSSL_LIBS} Boost::headers)
+set(GANDIVA_STATIC_LINK_LIBS arrow_static LLVM::LLVM_INTERFACE 
${GANDIVA_OPENSSL_LIBS}
+                             Boost::headers)
+if(ARROW_WITH_RE2)
+  list(APPEND GANDIVA_SHARED_PRIVATE_LINK_LIBS re2::re2)
+  list(APPEND GANDIVA_STATIC_LINK_LIBS re2::re2)
+endif()
+if(ARROW_WITH_UTF8PROC)
+  list(APPEND GANDIVA_SHARED_PRIVATE_LINK_LIBS utf8proc::utf8proc)
+  list(APPEND GANDIVA_STATIC_LINK_LIBS utf8proc::utf8proc)
+endif()
+if(ARROW_USE_XSIMD)
+  list(APPEND GANDIVA_SHARED_PRIVATE_LINK_LIBS xsimd)
+  list(APPEND GANDIVA_STATIC_LINK_LIBS xsimd)
+endif()
 
 if(ARROW_GANDIVA_STATIC_LIBSTDCPP AND (CMAKE_COMPILER_IS_GNUCC OR 
CMAKE_COMPILER_IS_GNUCXX
                                       ))
diff --git a/cpp/src/parquet/CMakeLists.txt b/cpp/src/parquet/CMakeLists.txt
index 4dcda67acf..28e4f00cac 100644
--- a/cpp/src/parquet/CMakeLists.txt
+++ b/cpp/src/parquet/CMakeLists.txt
@@ -105,13 +105,14 @@ endfunction()
 # TODO(wesm): Handling of ABI/SO version
 
 if(ARROW_BUILD_STATIC)
-  set(PARQUET_STATIC_LINK_LIBS arrow_static)
-  set(ARROW_LIBRARIES_FOR_STATIC_TESTS arrow_testing_static arrow_static)
+  set(PARQUET_STATIC_LINK_LIBS arrow_static ${ARROW_STATIC_LINK_LIBS})
+  set(ARROW_LIBRARIES_FOR_STATIC_TESTS arrow_testing_static arrow_static
+                                       ${ARROW_STATIC_LINK_LIBS})
 else()
   set(ARROW_LIBRARIES_FOR_STATIC_TESTS arrow_testing_shared arrow_shared)
 endif()
 
-set(PARQUET_MIN_TEST_LIBS GTest::gtest_main GTest::gtest)
+set(PARQUET_MIN_TEST_LIBS GTest::gtest_main GTest::gtest Boost::headers)
 
 if(APPLE)
   set(PARQUET_MIN_TEST_LIBS ${PARQUET_MIN_TEST_LIBS} ${CMAKE_DL_LIBS})
@@ -218,18 +219,6 @@ if(NOT PARQUET_MINIMAL_DEPENDENCY)
   # Link publicly with parquet_static (because internal users need to
   # transitively link all dependencies)
   set(PARQUET_STATIC_LINK_LIBS ${PARQUET_STATIC_LINK_LIBS} thrift::thrift)
-
-  # Although we don't link parquet_objlib against anything, we need it to 
depend
-  # on these libs as we may generate their headers via ExternalProject_Add
-  if(ARROW_BUILD_SHARED)
-    set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES} 
${PARQUET_SHARED_LINK_LIBS}
-                             ${PARQUET_SHARED_PRIVATE_LINK_LIBS})
-  endif()
-
-  if(ARROW_BUILD_STATIC)
-    set(PARQUET_DEPENDENCIES ${PARQUET_DEPENDENCIES} 
${PARQUET_STATIC_LINK_LIBS})
-  endif()
-
 endif(NOT PARQUET_MINIMAL_DEPENDENCY)
 
 if(CXX_LINKER_SUPPORTS_VERSION_SCRIPT)
@@ -248,8 +237,6 @@ add_arrow_lib(parquet
               "$<$<COMPILE_LANGUAGE:CXX>:parquet/pch.h>"
               OUTPUTS
               PARQUET_LIBRARIES
-              DEPENDENCIES
-              ${PARQUET_DEPENDENCIES}
               SHARED_LINK_FLAGS
               ${PARQUET_SHARED_LINK_FLAGS}
               SHARED_LINK_LIBS
@@ -263,7 +250,7 @@ if(WIN32 AND NOT (ARROW_TEST_LINKAGE STREQUAL "static"))
   add_library(parquet_test_support STATIC
               "${ARROW_SOURCE_DIR}/src/generated/parquet_constants.cpp"
               "${ARROW_SOURCE_DIR}/src/generated/parquet_types.cpp")
-  add_dependencies(parquet_test_support thrift::thrift)
+  target_link_libraries(parquet_test_support thrift::thrift)
   set(PARQUET_SHARED_TEST_LINK_LIBS ${PARQUET_SHARED_TEST_LINK_LIBS} 
parquet_test_support)
   set(PARQUET_LIBRARIES ${PARQUET_LIBRARIES} parquet_test_support)
 endif()
diff --git a/cpp/src/plasma/CMakeLists.txt b/cpp/src/plasma/CMakeLists.txt
index 46603d6f85..d78a5ccfdc 100644
--- a/cpp/src/plasma/CMakeLists.txt
+++ b/cpp/src/plasma/CMakeLists.txt
@@ -52,8 +52,8 @@ set(PLASMA_STORE_SRCS
     store.cc
     thirdparty/ae/ae.c)
 
-set(PLASMA_LINK_LIBS arrow_shared)
-set(PLASMA_STATIC_LINK_LIBS arrow_static)
+set(PLASMA_LINK_LIBS arrow::flatbuffers arrow_shared)
+set(PLASMA_STATIC_LINK_LIBS arrow::flatbuffers arrow_static)
 
 if(ARROW_CUDA)
   list(INSERT PLASMA_LINK_LIBS 0 arrow_cuda_shared)
@@ -113,13 +113,13 @@ list(APPEND PLASMA_EXTERNAL_STORE_SOURCES 
"external_store.cc" "hash_table_store.
 # We use static libraries for the plasma-store-server executable so that it can
 # be copied around and used in different locations.
 add_executable(plasma-store-server ${PLASMA_EXTERNAL_STORE_SOURCES} 
${PLASMA_STORE_SRCS})
-target_link_libraries(plasma-store-server ${GFLAGS_LIBRARIES})
 if(ARROW_BUILD_STATIC)
   target_link_libraries(plasma-store-server plasma_static 
${PLASMA_STATIC_LINK_LIBS})
 else()
   # Fallback to shared libs in the case that static libraries are not build.
   target_link_libraries(plasma-store-server plasma_shared ${PLASMA_LINK_LIBS})
 endif()
+target_link_libraries(plasma-store-server ${GFLAGS_LIBRARIES})
 add_dependencies(plasma plasma-store-server)
 
 if(ARROW_RPATH_ORIGIN)

Reply via email to