[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