es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo especificar un archivo para que se compile con C++ 11 en lugar de 98 en una biblioteca?

Estoy trabajando en un proyecto en el que la mayor parte debe compilarse en C++ 98, sin embargo, tengo exactamente un archivo que debe compilarse con C++ 11 en su lugar.

Código de ejemplo actual:

set(SOURCES
   file1.cpp
   file2.cpp
   file3.cpp
)

add_library(nombredelibrodeejemplo SHARED ${SOURCES})

Quiero especificar que file3.cpp debe compilarse con C++ STANDARD 11.

Intenté hacer set_target_properties(nombredelibrodeejemplo PROPERTIES CXX_STANDARD 11) en toda la biblioteca, pero desafortunadamente uno de los otros archivos no puede compilarse con C++ 11.

He intentado especificar solo el archivo objetivo usando:
set_property(SOURCE file3.cpp PROPERTY CXX_STANDARD 11)

pero desafortunadamente todavía obtengo los errores asociados con no compilarlo con C++ 11 (presumiblemente porque esta línea no afecta a la línea add_library).

¿Hay alguna forma de especificar que solo ese archivo de la biblioteca debe usar C++ 11?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Sí, puedes establecer el estándar de C++ solo para el archivo específico file3.cpp utilizando el comando set_source_files_properties de la siguiente manera:

    set(SOURCES
       file1.cpp
       file2.cpp
       file3.cpp
    )
    
    set_source_files_properties(file3.cpp PROPERTIES
                                CXX_STANDARD 11
                                CXX_STANDARD_REQUIRED ON)
    
    add_library(examplelibraryname SHARED ${SOURCES})
    

    Esto establecerá el estándar de C++ en 11 solo para file3.cpp y dejará que el resto de los archivos se compilen con el estándar predeterminado (que en este caso es C++ 98). La opción CXX_STANDARD_REQUIRED asegura que el compilador produzca un error si no puede cumplir con el estándar especificado.

Comments are closed.