[C con Clase] Pregunta Newbie con respecto a CMake
Emilio Canizalez
pouvoir_1 en live.com.mx
Mie Nov 30 17:42:18 CET 2011
debes de buscar en la documentacion de cmake no tengo cmeke pero con g++ las intrucciones song++ -c foo.cppcompilas foo generas archivo objeto foo.og++ -o main main.cpp foo.ohaces el enlace y compilas generas mainmodifica esto #include "foo.h" en foo.cpp y main.cpp suponiendo que estan en el mismo directorioespero te sirva
From: asdrubal.ivan.suarez.rivera en gmail.com
Date: Wed, 30 Nov 2011 10:04:35 -0430
To: cconclase en listas.conclase.net
Subject: Re: [C con Clase] Pregunta Newbie con respecto a CMake
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.
_______________________________________________
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
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111130/8a9a7074/attachment.html>
Más información sobre la lista de distribución Cconclase