[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 16:26:31 CET 2011


Como no, aquí se los envío, de todas formas los copié antes. Compilando con
g++ archivo por archivo a objeto no me da ningún error

fíjense los comandos que ejecuto

g++ foo.cpp -c -I.
g++ main.cpp -c -I.
g++ main.o foo.o -o main

Eso compila sin problema, ahora bien, usando el CMake me da error de
undefined reference, les envío ahí en el tar.gz el CMakeLists.txt

Saludos

El 30 de noviembre de 2011 10:22, Israel Alberto Roldan Vega <
israel.alberto.rv en gmail.com> escribió:

> Nos podrías enviar de favor los códigos fuentes para probarlos en mi
> computadora y poderte decir cual es el error.
>
> O la otra opción es que seas muy descriptivo y copies todo, código fuente,
> errores, línea de código para compilar, etc.
> Es como si hubieras comprado una televisión y llegas a la tienda de donde
> la compraste, y la devuelves. Dices "es que no sirve", ellos te pregunten
> "porque no sirve, no prende, no se ve bien la imagen", y tu dijeras "Ha
> pues porque no sirve mire las entradas de atrás". Realmente no se dio una
> explicación del problema, algo que nos ayude a ayudarte.
>
>
>
> Saludos,
> Israel Alberto RV
>
>
>
> El 30 de noviembre de 2011 08:34, Asdrúbal Iván Suárez Rivera <
> asdrubal.ivan.suarez.rivera en gmail.com> escribió:
>
> 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
>>
>
>
> _______________________________________________
> 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/4abb80ad/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: problemaCMake.tar.gz
Type: application/x-gzip
Size: 519 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111130/4abb80ad/attachment.gz>


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