2012-03-24 12 views
5
proyecto

Mi C++ tiene la siguiente estructuraCompilar directorios de fuentes múltiples con g ++

src 
| 
|source1.cpp 
|source2.cpp 
| 
|<srcfolder1> 
|__ source11.cpp 
|__ source12.cpp 
| 
|<srcfolder2> 
|__ source21.cpp 
|__ source22.cpp 

Como se puede ver hay varias carpetas con varios archivos de origen. ¿Qué comando le doy a g ++ para compilar todo el archivo fuente en un solo archivo .o?

+0

Erm, dale todos los archivos fuente? –

+0

hay alrededor de 100 archivos fuente. demasiados para listarlos uno por uno en el indicador de línea de comando – pdeva

+4

Creo que la forma más común en proyectos complejos es tener Makefiles en cada subcarpeta e invocarlos desde las carpetas principales. Por cierto, ¿por qué no usas un IDE de todos modos? – enobayram

Respuesta

5

Si tiene muchos archivos de origen que realmente debería considerar escribir un Makefile: http://mrbook.org/tutorials/make/

Por ejemplo, puede utilizar una sintaxis similar a este para compilar varios archivos (en el Makefile):

%.o : $(SRC_FOLDER)/%.cpp 
    $(CXX) -c -o [email protected] $< 
+0

Rolle, mi conocimiento de los archivos MAKE ahora es solo lo que leo en ese artículo al que vinculó;) ¿Podría explicar el comando que describió? ¿Qué significa el signo%? – pdeva

+2

Debe haber más tutoriales en línea que lo explican mejor de lo que puedo explicar aquí. Básicamente, lo que se lee arriba: para cada archivo fuente en SRC_FOLDER (definido en otra parte), compilar usando el argumento de la línea de comando definido en CXX, con las banderas -c -o, nombrando al mismo nombre que el archivo cpp pero con la terminación .o . Ver también mi edición anterior – Rolle

2

También podría usar sistemas de compilación que generarían el archivo MAKE real para usted. Esto se vuelve importante a medida que intenta expandir su proyecto y mantener un buen archivo make puede convertirse en una tarea desalentadora. Te sugiero que dediques un tiempo a aprender uno. Los ejemplos son Scons, GNU autotools, qmake y Cmake, entre otros. Recomiendo mucho el uso de qmake o Cmake, ya que son multiplataforma y fáciles de aprender.

¡Otra opción que tiene es simplemente usar un IDE! El mejor IDE c++ en Linux que conozco, y es multiplataforma, es Qt Creator. Debajo del capó, es compatible con los proyectos qmake y Cmake.

1

Si está acostumbrado a trabajar con Visual Studio y hay que compilar sus archivos bajo Linux, no hay necesidad de empezar a hacer todo en la línea de comandos;)

Como GradGuy señaló, QtCreator es un gran IDE y también lo uso para mis compilaciones que no sean Windows. Sin embargo, si no hace nada de GUI, puede usarlo junto con cmake ya que Qt se trata principalmente de GUI.

cmake es un generador para los archivos de solución (como archivos VS '.sln) que es independiente de qué IDE o su sistema operativo está ejecutando. Es un enfoque ascendente donde necesitas muy poco para ponerte en marcha.

Éstos son algunos pasos para empezar

  • instalar QtCreator y cmake
  • escribir un archivo contando cmake, donde los archivos de origen son y dónde encontrarlos.
  • crear un archivo CMakeLists.txt en la carpeta anterior src y escribir dentro de los siguientes:

    project(myProject) 
    
    # set your include directories (if you have any) 
    include_directories(include) 
    
    # tell cmake what what are your source files 
    set(MY_CPP_FILES 
        src/source1.cpp 
        src/source2.cpp 
        src/srcfolder1/source11.cpp 
        src/srcfolder1/source12.cpp 
        src/srcfolder2/source21.cpp 
        src/srcfolder2/source22.cpp) 
    
    # if you are creating an executable then do so like this 
    # note that ${MY_CPP_FILES} will replace it with its content 
    add_executable(myExec ${MY_CPP_FILES}) 
    
    # if you instead want a library, do it like so 
    add_library(myStaticLib STATIC ${MY_CPP_FILES}) # create a static library 
    add_library(mySharedLib SHARED ${MY_CPP_FILES}) # create a shared library 
    
  • ahora comenzar QtCreator y selecciona File -> Open File or Project y seleccione CMakeLists.txt en su unidad

  • ahora se le pedirá que elija una ruta donde se almacenarán los resultados (así como todos los archivos intermedios)
  • hit Run CMake
  • y finalmente elija Build -> Build All

¡Buena suerte!

Cuestiones relacionadas