[C con Clase] Pregunta Newbie con respecto a CMake

Israel Alberto Roldan Vega israel.alberto.rv en gmail.com
Jue Dic 1 17:03:09 CET 2011


De Nada Ivan,

Te deseo un bonito fin de semana.


Saludos,
Israel Alberto RV



El 1 de diciembre de 2011 07:26, Asdrúbal Iván Suárez Rivera <
asdrubal.ivan.suarez.rivera en gmail.com> escribió:

> Listo...!! Ya me funcionó!! Muchas gracias, me sirvió de mucha ayuda :)
>
> El 30 de noviembre de 2011 15:45, Israel Alberto Roldan Vega <
> israel.alberto.rv en gmail.com> escribió:
>
> Por cierto, la referencia la tome de este link y después de buscar en
>> muchos sitios.
>>
>> http://eris.liralab.it/yarpdoc/using_cmake.html
>>
>>
>> Saludos,
>> Israel Alberto RV
>>
>>
>>
>> El 30 de noviembre de 2011 14:13, Israel Alberto Roldan Vega <
>> israel.alberto.rv en gmail.com> escribió:
>>
>> Solucionado el problema:
>>>
>>>
>>> En el archivo CMakeLists.txt:
>>>
>>> cmake_minimum_required(VERSION 2.8)
>>> project(sourcetohtml)
>>> add_library(foo foo.cpp foo.h)
>>> add_executable(sourcetohtml main.cpp)
>>> target_link_libraries(sourcetohtml foo)
>>>
>>>
>>> En el archivo main.cpp y foo.cpp cambia:
>>>
>>> #include <foo.h>
>>> por
>>> #include "foo.h"
>>> //Error, cuando usamos librerias que creamos nosotros o includes que
>>> creamos nosotros, se usan comillas.
>>>
>>> Te adjunto los archivos para que los puedas probar.
>>> Ademas te anexo unas lineas de código que puedes correr en Linux para
>>> compilar mas rápido.
>>>
>>> cd problemaCMake2
>>> mkdir build
>>> cd build
>>>
>>> Para compilar dentro de la carpeta de build:
>>> clear && rm * -Rf && cmake .. && make && ./sourcetohtml
>>>
>>>
>>>
>>> Saludos,
>>> Israel Alberto RV
>>>
>>>
>>>
>>> El 30 de noviembre de 2011 09:26, Asdrúbal Iván Suárez Rivera <
>>> asdrubal.ivan.suarez.rivera en gmail.com> escribió:
>>>
>>> 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.*
>>>>
>>>>
>>>> _______________________________________________
>>>> 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.*
>
>
> _______________________________________________
> 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/20111201/37b327e5/attachment.html>


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