[C con Clase] Pregunta Newbie con respecto a CMake

Israel Alberto Roldan Vega israel.alberto.rv en gmail.com
Mie Nov 30 21:13:22 CET 2011


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111130/4084a97f/attachment.html>
------------ próxima parte ------------
A non-text attachment was scrubbed...
Name: problemaCMake.tar.gz
Type: application/x-gzip
Size: 23693 bytes
Desc: no disponible
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20111130/4084a97f/attachment.gz>


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