[C con Clase] Pregunta Newbie con respecto a CMake

Asdrúbal Iván Suárez Rivera asdrubal.ivan.suarez.rivera en gmail.com
Mie Nov 30 15:34:35 CET 2011


Correcto Steven, eso lo sé... La cuestión es que la función ya la tengo
definida en foo.cpp y he revisado la cabecera y está correcta, fíjate:

foo.h:

#ifndef FOO_H
#define FOO_H

void algo();

#endif

foo.cpp:

#include <foo.h>
#include <iostream>

void algo()
{
std::cout<<"algo";
}

main.cpp

#include <iostream>
#include <foo.h>

int main(int argc, char **argv) {
    algo();
    return 0;
}


Creo sinceramente que no hay errores ahí. La cuestión es que quiero hacer
que el CMake me enlace el foo.o y main.o para crear el main. Usando
makefile me compila normalmente, sin embargo quiero, para aprender a usar
CMake hacer lo mismo usando el CMake, valga la redundancia.

Saludos!

El 30 de noviembre de 2011 08:56, Steven Davidson <srd4121 en njit.edu>escribió:

> Hola Asdrúbal,
>
> 2011/11/30 Asdrúbal Iván Suárez Rivera <
> asdrubal.ivan.suarez.rivera en gmail.com>:
> > Tengo una pequeña duda usando el programa CMake, resulta que tengo 3
> > archivos, llamados
> >
> > main.cpp
> > foo.h
> > foo.cpp
> >
> > Me gustaría saber como puedo yo hacer que se me compile un archivo foo.o
> y
> > se enlace con un main.o, para que no el g++ no me dé un error del tipo
> > "undefined reference" al llamar alguna función desde el main que está
> > declarada en foo.h y definida en foo.cpp
> >
>
> Si el compilador/enlazador, "g++", te lanza un error, entonces
> deberías hacer caso de tal error y no intentar eludirlo. Este tipo de
> mensaje es del enlazador, ya que no encuentra la función que quieres
> usar. Sin ver el código fuente, no te puedo decir si has cometido un
> error o no. Es posible que el prototipo en "foo.h" no es idéntico a la
> implementación en "foo.cpp". Por ejemplo,
>
> // foo.h
>
> int suma( int, int );
>
>
> // foo.cpp
>
> #include "foo.h"
>
> float suma( float a, float b )
> {
>  return a+b;
> }
>
> Y luego, en "main.cpp":
>
> #include <iostream>
> #include "foo.h"
>
> int main()
> {
>  std::cout << suma( 4, 2 ) << std::endl;
>
>  return 0;
> }
>
> Aquí, el enlazador te marcará un error de un uso o referencia sin
> definir para 'suma(int,int)'. El compilador no te marca ningún error,
> porque gramaticalmente todo es correcto, pero lógicamente no, ya que
> 'float suma( float, float )' no es lo mismo que 'int suma( int, int
> )'.
>
>
> Espero que esto te oriente.
>
> Steven
>
> _______________________________________________
> Lista de correo Cconclase Cconclase en listas.conclase.net
> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>



-- 
Asdrúbal Iván Suárez Rivera

*El éxito de alguien que enseña no es que sepa mucho, sino que lo poco que
sabe lo sepa hacer llegar.*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111130/7a804bfc/attachment.html>


Más información sobre la lista de distribución Cconclase