[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