2012-09-22 16 views
8

Estoy tratando de integrar GTest con CMake tan perfectamente como sea posible. Pero el tipo de compilación predeterminado para mis proyectos de prueba es /MDd y el valor predeterminado de GTest es /MTd. Estoy cambiando manualmente las propiedades del proyecto GTest para emitir DLL de depuración.¿Cómo hacer GTest build/MDd (en lugar de/MTd) de forma predeterminada, utilizando CMake?

Pero cada vez que realizo cambios en mi CMakeLists.txt, el valor predeterminado de GTest es /MTd. ¿Cómo paro esto?

Respuesta

0

hemos resuelto el problema sin pasar por propio sistema de construcción de GTEST y compilar GTEST como CMake object library de su archivo de origen construir la unidad gtest-all.cc:

# compile Google Test as an object library 
add_library(gtest OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.6.0/src/gtest-all.cc") 
set_property(TARGET gtest PROPERTY INCLUDE_DIRECTORIES 
    "${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.6.0" 
    "${CMAKE_CURRENT_SOURCE_DIR}/gtest-1.6.0/include") 

De esa manera GTEST siempre será compilado con las mismas opciones que utilizamos para el proyecto. Un ejecutable prueba que usa GTEST entonces se puede construir de la siguiente manera:

add_executable(test_executable ${TESTS_SRC} $<TARGET_OBJECTS:gtest>) 
add_test(NAME test COMMAND test_executable) 
+0

en Linux, GTEST depende de la biblioteca 'pthreads'. ¿Cómo asocio tal dependencia en el objeto 'gtest'? – Hindol

+0

Creó una [pregunta separada] (http://stackoverflow.com/questions/12560054/how-to-set-library-dependencies-on-cmake-library-objects) para esto. – Hindol

+0

De esta manera, recompila toda la fuente de gtest para cada ejecutable de prueba separado, no muy eficiente. También pierde todas las comprobaciones y configuraciones contenidas en el propio CMakeLists.txt de gtest, siendo una repercusión la dependencia faltante de pthread en Linux. – Fraser

13

Puede definir gtest_force_shared_crt a ON antes de incluir GTEST para lograrlo. Usted puede hacer esto a través de la línea de comandos:

cmake . -Dgtest_force_shared_crt=ON 

o en su CMakeLists.txt:

set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) 
+1

Debe agregar la corrección de Ted Middleton de abajo. Agregar la línea set(), como lo sugiere, no tiene influencia en la compilación gtest. También se debe especificar – Ela782

13

creo que la mejor opción es @ respuesta de Fraser - en ese caso, cmake + GTEST 'sólo el trabajo' .

Vale la pena mencionar que con el fin de anular la configuración interna GTEST option, hay que poner la variable en la memoria caché cmake:

set(gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll") 
+0

'FORCE', consulte https://github.com/google/googletest/blob/master/googletest/README.md. –

4

Si la respuesta de Ted Middleton no funciona, trate de usar la fuerza:

set(gtest_force_shared_crt ON CACHE BOOL "Always use msvcrt.dll" FORCE) 

que trabajó para mí

+0

Esta es la forma recomendada, de acuerdo con https://github.com/google/googletest/blob/master/googletest/README.md. –

Cuestiones relacionadas