@@ -6,48 +6,7 @@ To build Google Test and your tests that use it, you need to tell your build
66system where to find its headers and source files. The exact way to do it
77depends on which build system you use, and is usually straightforward.
88
9- #### Build
10-
11- Suppose you put Google Test in directory ` ${GTEST_DIR} ` . To build it, create a
12- library build target (or a project as called by Visual Studio and Xcode) to
13- compile
14-
15- ${GTEST_DIR}/src/gtest-all.cc
16-
17- with ` ${GTEST_DIR}/include ` in the system header search path and ` ${GTEST_DIR} `
18- in the normal header search path. Assuming a Linux-like system and gcc,
19- something like the following will do:
20-
21- g++ -isystem ${GTEST_DIR}/include -I${GTEST_DIR} \
22- -pthread -c ${GTEST_DIR}/src/gtest-all.cc
23- ar -rv libgtest.a gtest-all.o
24-
25- (We need ` -pthread ` as Google Test uses threads.)
26-
27- Next, you should compile your test source file with ` ${GTEST_DIR}/include ` in
28- the system header search path, and link it with gtest and any other necessary
29- libraries:
30-
31- g++ -isystem ${GTEST_DIR}/include -pthread path/to/your_test.cc libgtest.a \
32- -o your_test
33-
34- As an example, the make/ directory contains a Makefile that you can use to build
35- Google Test on systems where GNU make is available (e.g. Linux, Mac OS X, and
36- Cygwin). It doesn't try to build Google Test's own tests. Instead, it just
37- builds the Google Test library and a sample test. You can use it as a starting
38- point for your own build script.
39-
40- If the default settings are correct for your environment, the following commands
41- should succeed:
42-
43- cd ${GTEST_DIR}/make
44- make
45- ./sample1_unittest
46-
47- If you see errors, try to tweak the contents of ` make/Makefile ` to make them go
48- away. There are instructions in ` make/Makefile ` on how to do it.
49-
50- ### Using CMake
9+ ### Build with CMake
5110
5211Google Test comes with a CMake build script (
5312[ CMakeLists.txt] ( https://github.com/google/googletest/blob/master/CMakeLists.txt ) )
@@ -115,60 +74,64 @@ pulled into the main build with `add_subdirectory()`. For example:
11574
11675New file ` CMakeLists.txt.in ` :
11776
118- cmake_minimum_required(VERSION 2.8.2)
77+ ``` cmake
78+ cmake_minimum_required(VERSION 2.8.2)
11979
120- project(googletest-download NONE)
80+ project(googletest-download NONE)
12181
122- include(ExternalProject)
123- ExternalProject_Add(googletest
124- GIT_REPOSITORY https://github.com/google/googletest.git
125- GIT_TAG master
126- SOURCE_DIR "${CMAKE_BINARY_DIR}/googletest-src"
127- BINARY_DIR "${CMAKE_BINARY_DIR}/googletest-build"
128- CONFIGURE_COMMAND ""
129- BUILD_COMMAND ""
130- INSTALL_COMMAND ""
131- TEST_COMMAND ""
132- )
82+ include(ExternalProject)
83+ ExternalProject_Add(googletest
84+ GIT_REPOSITORY https://github.com/google/googletest.git
85+ GIT_TAG master
86+ SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src"
87+ BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build"
88+ CONFIGURE_COMMAND ""
89+ BUILD_COMMAND ""
90+ INSTALL_COMMAND ""
91+ TEST_COMMAND ""
92+ )
93+ ```
13394
13495Existing build's ` CMakeLists.txt ` :
13596
136- # Download and unpack googletest at configure time
137- configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
138- execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
139- RESULT_VARIABLE result
140- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download )
141- if(result)
142- message(FATAL_ERROR "CMake step for googletest failed: ${result}")
143- endif()
144- execute_process(COMMAND ${CMAKE_COMMAND} --build .
145- RESULT_VARIABLE result
146- WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/googletest-download )
147- if(result)
148- message(FATAL_ERROR "Build step for googletest failed: ${result}")
149- endif()
150-
151- # Prevent overriding the parent project's compiler/linker
152- # settings on Windows
153- set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
154-
155- # Add googletest directly to our build. This defines
156- # the gtest and gtest_main targets.
157- add_subdirectory(${CMAKE_BINARY_DIR}/googletest-src
158- ${CMAKE_BINARY_DIR}/googletest-build
159- EXCLUDE_FROM_ALL)
160-
161- # The gtest/gtest_main targets carry header search path
162- # dependencies automatically when using CMake 2.8.11 or
163- # later. Otherwise we have to add them here ourselves.
164- if (CMAKE_VERSION VERSION_LESS 2.8.11)
165- include_directories("${gtest_SOURCE_DIR}/include")
166- endif()
167-
168- # Now simply link against gtest or gtest_main as needed. Eg
169- add_executable(example example.cpp)
170- target_link_libraries(example gtest_main)
171- add_test(NAME example_test COMMAND example)
97+ ``` cmake
98+ # Download and unpack googletest at configure time
99+ configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt)
100+ execute_process(COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" .
101+ RESULT_VARIABLE result
102+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
103+ if(result)
104+ message(FATAL_ERROR "CMake step for googletest failed: ${result}")
105+ endif()
106+ execute_process(COMMAND ${CMAKE_COMMAND} --build .
107+ RESULT_VARIABLE result
108+ WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download )
109+ if(result)
110+ message(FATAL_ERROR "Build step for googletest failed: ${result}")
111+ endif()
112+
113+ # Prevent overriding the parent project's compiler/linker
114+ # settings on Windows
115+ set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)
116+
117+ # Add googletest directly to our build. This defines
118+ # the gtest and gtest_main targets.
119+ add_subdirectory(${CMAKE_CURRENT_BINARY_DIR}/googletest-src
120+ ${CMAKE_CURRENT_BINARY_DIR}/googletest-build
121+ EXCLUDE_FROM_ALL)
122+
123+ # The gtest/gtest_main targets carry header search path
124+ # dependencies automatically when using CMake 2.8.11 or
125+ # later. Otherwise we have to add them here ourselves.
126+ if (CMAKE_VERSION VERSION_LESS 2.8.11)
127+ include_directories("${gtest_SOURCE_DIR}/include")
128+ endif()
129+
130+ # Now simply link against gtest or gtest_main as needed. Eg
131+ add_executable(example example.cpp)
132+ target_link_libraries(example gtest_main)
133+ add_test(NAME example_test COMMAND example)
134+ ```
172135
173136Note that this approach requires CMake 2.8.2 or later due to its use of the
174137` ExternalProject_Add() ` command. The above technique is discussed in more detail
@@ -188,47 +151,14 @@ Google Test already has a CMake option for this: `gtest_force_shared_crt`
188151Enabling this option will make gtest link the runtimes dynamically too, and
189152match the project in which it is included.
190153
191- ### Legacy Build Scripts
192-
193- Before settling on CMake, we have been providing hand-maintained build
194- projects/scripts for Visual Studio, Xcode, and Autotools. While we continue to
195- provide them for convenience, they are not actively maintained any more. We
196- highly recommend that you follow the instructions in the above sections to
197- integrate Google Test with your existing build system.
198-
199- If you still need to use the legacy build scripts, here's how:
200-
201- The msvc\ folder contains two solutions with Visual C++ projects. Open the
202- ` gtest.sln ` or ` gtest-md.sln ` file using Visual Studio, and you are ready to
203- build Google Test the same way you build any Visual Studio project. Files that
204- have names ending with -md use DLL versions of Microsoft runtime libraries (the
205- /MD or the /MDd compiler option). Files without that suffix use static versions
206- of the runtime libraries (the /MT or the /MTd option). Please note that one must
207- use the same option to compile both gtest and the test code. If you use Visual
208- Studio 2005 or above, we recommend the -md version as /MD is the default for new
209- projects in these versions of Visual Studio.
154+ #### C++ Standard Version
210155
211- On Mac OS X, open the ` gtest.xcodeproj ` in the ` xcode/ ` folder using Xcode.
212- Build the "gtest" target. The universal binary framework will end up in your
213- selected build directory (selected in the Xcode "Preferences..." -> "Building"
214- pane and defaults to xcode/build). Alternatively, at the command line, enter:
215-
216- xcodebuild
217-
218- This will build the "Release" configuration of gtest.framework in your default
219- build location. See the "xcodebuild" man page for more information about
220- building different configurations and building in different locations.
221-
222- If you wish to use the Google Test Xcode project with Xcode 4.x and above, you
223- need to either:
224-
225- * update the SDK configuration options in xcode/Config/General.xconfig.
226- Comment options ` SDKROOT ` , ` MACOS_DEPLOYMENT_TARGET ` , and ` GCC_VERSION ` . If
227- you choose this route you lose the ability to target earlier versions of
228- MacOS X.
229- * Install an SDK for an earlier version. This doesn't appear to be supported
230- by Apple, but has been reported to work
231- (http://stackoverflow.com/questions/5378518 ).
156+ An environment that supports C++11 is required in order to successfully build
157+ Google Test. One way to ensure this is to specify the standard in the top-level
158+ project, for example by using the ` set(CMAKE_CXX_STANDARD 11) ` command. If this
159+ is not feasible, for example in a C project using Google Test for validation,
160+ then it can be specified by adding it to the options for cmake via the
161+ ` DCMAKE_CXX_FLAGS ` option.
232162
233163### Tweaking Google Test
234164
@@ -239,41 +169,14 @@ command line. Generally, these macros are named like `GTEST_XYZ` and you define
239169them to either 1 or 0 to enable or disable a certain feature.
240170
241171We list the most frequently used macros below. For a complete list, see file
242- [ include/gtest/internal/gtest-port.h] ( https://github.com/google/googletest/blob/master/include/gtest/internal/gtest-port.h ) .
243-
244- ### Choosing a TR1 Tuple Library
245-
246- Some Google Test features require the C++ Technical Report 1 (TR1) tuple
247- library, which is not yet available with all compilers. The good news is that
248- Google Test implements a subset of TR1 tuple that's enough for its own need, and
249- will automatically use this when the compiler doesn't provide TR1 tuple.
250-
251- Usually you don't need to care about which tuple library Google Test uses.
252- However, if your project already uses TR1 tuple, you need to tell Google Test to
253- use the same TR1 tuple library the rest of your project uses, or the two tuple
254- implementations will clash. To do that, add
255-
256- -DGTEST_USE_OWN_TR1_TUPLE=0
257-
258- to the compiler flags while compiling Google Test and your tests. If you want to
259- force Google Test to use its own tuple library, just add
260-
261- -DGTEST_USE_OWN_TR1_TUPLE=1
262-
263- to the compiler flags instead.
264-
265- If you don't want Google Test to use tuple at all, add
266-
267- -DGTEST_HAS_TR1_TUPLE=0
268-
269- and all features using tuple will be disabled.
172+ [ include/gtest/internal/gtest-port.h] ( https://github.com/google/googletest/blob/master/googletest/include/gtest/internal/gtest-port.h ) .
270173
271174### Multi-threaded Tests
272175
273176Google Test is thread-safe where the pthread library is available. After
274- ` #include "gtest/gtest.h" ` , you can check the ` GTEST_IS_THREADSAFE ` macro to see
275- whether this is the case (yes if the macro is ` #defined ` to 1, no if it's
276- undefined.).
177+ ` #include "gtest/gtest.h" ` , you can check the
178+ ` GTEST_IS_THREADSAFE ` macro to see whether this is the case (yes if the macro is
179+ ` #defined ` to 1, no if it's undefined.).
277180
278181If Google Test doesn't correctly detect whether pthread is available in your
279182environment, you can force it with
0 commit comments