2010-09-22 10 views
45

Estoy tratando de incluir varias bibliotecas de terceros en mi árbol de fuentes con cambios mínimos en su sistema de compilación para facilitar la actualización. Todos usan CMake, como yo, así que en mi propio CMakeLists.txt puedo usar add_subdirectory(extern/foo) para libfoo.Anulando una opción predeterminada (...) valor en CMake desde un padre CMakeLists.txt

Pero el foo CMakeLists.txt compila un arnés de prueba, crea documentación, una biblioteca compartida que no necesito, y así sucesivamente. Los autores de libfoo tuvieron la previsión de controlar estas opciones de vía, por ejemplo, option(FOO_BUILD_SHARED "Build libfoo shared library" ON), lo que significa que puedo configurarlas a través de la línea de comandos de CMake. Pero me gustaría desactivarlo por defecto y anularlo a través de la línea de comando.

He intentado hacer set(FOO_BUILD_SHARED OFF) antes de add_subdirectory(extern/foo). Eso tiene el efecto de no tratar de construir la biblioteca compartida durante el segundo y posteriores intentos de compilación, pero no durante el primero, que es el que realmente necesito acelerar.

¿Es esto posible o necesito mantener CMakeLists.txt bifurcado para estos proyectos?

Respuesta

55

intente configurar la variable en la memoria caché

SET(FOO_BUILD_SHARED OFF CACHE BOOL "Build libfoo shared library") 

Nota: Es necesario especificar el tipo de variable y una descripción para CMake sabe cómo mostrar esta entrada en la interfaz gráfica de usuario.

+7

Ponlo antes del comando add_subdirectory, por lo que establecerá el valor predeterminado para la variable. – tibur

+4

A veces necesitas usar la 'PROPUESTA' – Rajish

+1

Consejo profesional (para mí): 'FORCE' va detrás de la cadena de documentación, no al azar en el medio ... – Claudiu

Cuestiones relacionadas