[C con Clase] Pregunta Newbie con respecto a CMake

Asdrúbal Iván Suárez Rivera asdrubal.ivan.suarez.rivera en gmail.com
Jue Dic 1 14:26:27 CET 2011


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.*
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111201/084f885a/attachment.html>


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