aboutsummaryrefslogtreecommitdiff
path: root/CMake/README.md
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-15 21:36:57 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-06-15 21:36:57 +0000
commitf363aea21641de7de5ea4b8835b76900ecca0a85 (patch)
tree6cf3c89b6849ab38ec1689687d291a3e249796ab /CMake/README.md
parent673746244b2ade8dc80ad3f84a3114e8d2b0ab16 (diff)
parent49c8bf1afa2dd4067e948e89a0bdc21e40effdbe (diff)
downloadabseil-cpp-f363aea21641de7de5ea4b8835b76900ecca0a85.tar.gz
Change-Id: I5e56968d342207f843d5c40fc8163c3965c248bd
Diffstat (limited to 'CMake/README.md')
-rw-r--r--CMake/README.md96
1 files changed, 6 insertions, 90 deletions
diff --git a/CMake/README.md b/CMake/README.md
index f8b27e63..04d5df3a 100644
--- a/CMake/README.md
+++ b/CMake/README.md
@@ -34,16 +34,15 @@ to include Abseil directly in your CMake project.
4. Add the **absl::** target you wish to use to the
[`target_link_libraries()`](https://cmake.org/cmake/help/latest/command/target_link_libraries.html)
section of your executable or of your library.<br>
-Here is a short CMakeLists.txt example of an application project using Abseil.
+Here is a short CMakeLists.txt example of a project file using Abseil.
```cmake
-cmake_minimum_required(VERSION 3.8.2)
-project(my_app_project)
+cmake_minimum_required(VERSION 3.5)
+project(my_project)
# Pick the C++ standard to compile with.
# Abseil currently supports C++11, C++14, and C++17.
set(CMAKE_CXX_STANDARD 11)
-set(CMAKE_CXX_STANDARD_REQUIRED ON)
add_subdirectory(abseil-cpp)
@@ -51,47 +50,9 @@ add_executable(my_exe source.cpp)
target_link_libraries(my_exe absl::base absl::synchronization absl::strings)
```
-Note that if you are developing a library designed for use by other clients, you
-should instead leave `CMAKE_CXX_STANDARD` unset (or only set if being built as
-the current top-level CMake project) and configure the minimum required C++
-standard at the target level. If you require a later minimum C++ standard than
-Abseil does, it's a good idea to also enforce that `CMAKE_CXX_STANDARD` (which
-will control Abseil library targets) is set to at least that minimum. For
-example:
-
-```cmake
-cmake_minimum_required(VERSION 3.8.2)
-project(my_lib_project)
-
-# Leave C++ standard up to the root application, so set it only if this is the
-# current top-level CMake project.
-if(CMAKE_SOURCE_DIR STREQUAL my_lib_project_SOURCE_DIR)
- set(CMAKE_CXX_STANDARD 17)
- set(CMAKE_CXX_STANDARD_REQUIRED ON)
-endif()
-
-add_subdirectory(abseil-cpp)
-
-add_library(my_lib source.cpp)
-target_link_libraries(my_lib absl::base absl::synchronization absl::strings)
-
-# Enforce that my_lib requires C++17. Important to document for clients that they
-# must set CMAKE_CXX_STANDARD to 17 or higher for proper Abseil ABI compatibility
-# (since otherwise, Abseil library targets could be compiled with a lower C++
-# standard than my_lib).
-target_compile_features(my_lib PUBLIC cxx_std_17)
-if(CMAKE_CXX_STANDARD LESS 17)
- message(FATAL_ERROR
- "my_lib_project requires CMAKE_CXX_STANDARD >= 17 (got: ${CMAKE_CXX_STANDARD})")
-endif()
-```
-
-Then the top-level application project that uses your library is responsible for
-setting a consistent `CMAKE_CXX_STANDARD` that is sufficiently high.
-
### Running Abseil Tests with CMake
-Use the `-DBUILD_TESTING=ON` flag to run Abseil tests.
+Use the `-DABSL_RUN_TESTS=ON` flag to run Abseil tests. Note that if the `-DBUILD_TESTING=OFF` flag is passed then Abseil tests will not be run.
You will need to provide Abseil with a Googletest dependency. There are two
options for how to do this:
@@ -109,7 +70,7 @@ For example, to run just the Abseil tests, you could use this script:
cd path/to/abseil-cpp
mkdir build
cd build
-cmake -DBUILD_TESTING=ON -DABSL_USE_GOOGLETEST_HEAD=ON ..
+cmake -DABSL_USE_GOOGLETEST_HEAD=ON -DABSL_RUN_TESTS=ON ..
make -j
ctest
```
@@ -132,54 +93,9 @@ absl::flags
absl::memory
absl::meta
absl::numeric
-absl::random_random
+absl::random
absl::strings
absl::synchronization
absl::time
absl::utility
```
-
-## Traditional CMake Set-Up
-
-For larger projects, it may make sense to use the traditional CMake set-up where you build and install projects separately.
-
-First, you'd need to build and install Google Test:
-```
-cmake -S /source/googletest -B /build/googletest -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/installation/dir -DBUILD_GMOCK=ON
-cmake --build /build/googletest --target install
-```
-
-Then you need to configure and build Abseil. Make sure you enable `ABSL_USE_EXTERNAL_GOOGLETEST` and `ABSL_FIND_GOOGLETEST`. You also need to enable `ABSL_ENABLE_INSTALL` so that you can install Abseil itself.
-```
-cmake -S /source/abseil-cpp -B /build/abseil-cpp -DCMAKE_PREFIX_PATH=/installation/dir -DCMAKE_INSTALL_PREFIX=/installation/dir -DABSL_ENABLE_INSTALL=ON -DABSL_USE_EXTERNAL_GOOGLETEST=ON -DABSL_FIND_GOOGLETEST=ON
-cmake --build /temporary/build/abseil-cpp
-```
-
-(`CMAKE_PREFIX_PATH` is where you already have Google Test installed; `CMAKE_INSTALL_PREFIX` is where you want to have Abseil installed; they can be different.)
-
-Run the tests:
-```
-ctest --test-dir /temporary/build/abseil-cpp
-```
-
-And finally install:
-```
-cmake --build /temporary/build/abseil-cpp --target install
-```
-
-# CMake Option Synposis
-
-## Enable Standard CMake Installation
-
-`-DABSL_ENABLE_INSTALL=ON`
-
-## Google Test Options
-
-`-DBUILD_TESTING=ON` must be set to enable testing
-
-- Have Abseil download and build Google Test for you: `-DABSL_USE_EXTERNAL_GOOGLETEST=OFF` (default)
- - Download and build latest Google Test: `-DABSL_USE_GOOGLETEST_HEAD=ON`
- - Download specific Google Test version (ZIP archive): `-DABSL_GOOGLETEST_DOWNLOAD_URL=https://.../version.zip`
- - Use Google Test from specific local directory: `-DABSL_LOCAL_GOOGLETEST_DIR=/path/to/googletest`
-- Use Google Test included elsewhere in your project: `-DABSL_USE_EXTERNAL_GOOGLETEST=ON`
-- Use standard CMake `find_package(CTest)` to find installed Google Test: `-DABSL_USE_EXTERNAL_GOOGLETEST=ON -DABSL_FIND_GOOGLETEST=ON`