2008-09-28 5 views
5

Tengo un proyecto en el que estoy trabajando (para la escuela) que estoy buscando en las bibliotecas de Boost para las soluciones. Necesito una forma de distribuir el código fuente requerido de Boost con mi aplicación para que pueda compilarse sin que las bibliotecas estén instaladas en el sistema que realiza la compilación. (Las computadoras de la escuela carecen de todo lo que pueda mencionar. La escuela acaba de instalar CVS el año pasado. Pero sí tienen VS2005)Incluyendo Bibliotecas relevantes de Boost con fuente C++ (usando Visual Studio)

Nota: Estoy usando Visual Studio 2005 en Vista. Tengo Boost 1.34.1 en mi sistema. Usé el automatic installer. La documentación con la que me he encontrado dice algo sobre el uso del comando BCP, pero ese comando no parece copiar nada. (Estoy usando la ruta absoluta para llamar a BCP, así que no termino llamando al comando incorrecto.)

Editar: Estoy tratando de usar las bibliotecas RegEx.

Editar: El comando que estoy usando para el BCP es: "c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" boost/regex.hpp regex\

y devuelve: no errors detected

+0

¿Puedes publicar el comando que usaste para ejecutar bcp? Esto podría ayudar a identificar el problema. –

Respuesta

5

Depende de la biblioteca que está utilizando. Si está utilizando una biblioteca de solo encabezado (la mayoría de las bibliotecas de impulso son, algunas excepciones notables son señales, serialización y fecha/hora) puede simplemente copiar esos archivos de encabezado. De lo contrario, también deberá copiar los archivos cpp. Mi sugerencia es simplemente incluirlos en su proyecto.

Por lo tanto, esto es lo que debe hacer: eliminar la ruta de incluir impulso incluida en la configuración de su proyecto (herramientas-> opciones-> proyectos y soluciones-> directorios vC++-> archivos incluidos). Intenta compilar. Mire qué incluye falla. Copie ese archivo de su directorio de impulso a su directorio de proyecto. Enjabona, enjuaga, repite hasta que tu proyecto se compile.

Si está utilizando una biblioteca que requiere archivos .cpp, obtendrá un error al momento del enlace. Copie todos los archivos .cpp de la biblioteca que usa en el directorio de su proyecto y agréguelos a su solución. Reconstruye y cruza los dedos.

Para obtener una respuesta más detallada, publique las bibliotecas que está utilizando.

+0

Estoy usando la biblioteca RegEx. – epochwolf

0

He encontrado esto antes, incrustando impulso en mis proyectos. Cada biblioteca de impulso individual viene con varios archivos de proyecto para compilar con diferentes sistemas make (Jam, make, Visual Studio 6 ...) pero nunca son tan geniales con las versiones más nuevas de VS.

Siempre prefiero crear un nuevo archivo de proyecto e insertar un impulso directamente en mi proyecto. Es bastante simple, solo necesita agregar todos los archivos fuente y establecer las opciones del proyecto correctamente. Sin embargo, hay una advertencia, y es que debe nombrar el archivo de salida de la biblioteca como lo hace el refuerzo, porque sus archivos de inclusión dependen de eso.

Una vez que haya hecho esto, puede distribuir las bibliotecas de impulso al igual que cualquier otro archivo en su proyecto.

1

Esto me parece un poco extraño. Si está distribuyendo el código fuente, las personas a las que distribuye deberían poder instalar boost. Entonces, si ya tienen impulso, no hay duplicación y confusión, o si no lo hacen y necesita una biblioteca integrada, construirán la biblioteca correcta para su sistema. Si las personas que estás distribuyendo no están dispuestas a instalar boost, entonces te sugiero que distribuyas binarios en un paquete de instalación para que sea lo más fácil posible para ellos.

+0

Él dice que es para un proyecto escolar. Las personas que asignan tareas no van a instalar bibliotecas para proyectos, pasarían días jugueteando con estas bibliotecas para todos los diferentes estudiantes. Por lo general, se requiere que las tareas sean autónomas. – Roel

+0

Roel tiene eso correcto. Necesito incrustar la biblioteca con el resto del código fuente. – epochwolf

2

intente llamar BCP con este comando:

"c:\Program Files\boost\boost_1_34_1\bin\bcp.exe" --boost="c:\Program Files\boost\boost_1_34_1" regex regex 

--boost dice BCP donde está instalado impulso, el primer regex es el nombre de los módulos, el segundo es el directorio de destino.

Ah, y si aún no lo ha notado, hay archivos make de Visual C++ en libs\regex\build\.

+0

Gracias, intentaré. Si hace alguna diferencia, estoy usando C++ estándar, no la extensión de Microsoft. – epochwolf

2

Según su comentario de que está utilizando regex, esto es lo que hace: descargue el archivo zip de distribución de impulso 'normal'. Descomprímelo en alguna parte. Ir a libs/regex/src. Copie y pegue todos los archivos .cpp en ese directorio en su directorio de proyecto. Añádalos a su proyecto de Visual Studio (haga clic con el botón derecho, 'agregar' -> 'elemento existente'). Luego vaya a boost/regex y copie todo allí (los archivos de encabezado) a su directorio de proyecto (incluidos los subdirectorios). Cambie todas las inclusiones en sus propios archivos .cpp y .h de #include a "regex.hpp" para que incluya los encabezados de su directorio local y no los que se instalaron en todo el sistema. Asegúrese de eliminar la ruta de inclusión de todo el sistema desde la configuración de su proyecto, como dije en mi última publicación.

Luego, compile su código. Obtendrá una serie de errores de 'archivo de inclusión faltante' porque regex depende de otras bibliotecas de refuerzo. Repita todo el proceso: vaya a boost/xxx, donde xxx es la biblioteca que busca Regex. Puede deducir la biblioteca del mensaje de error. Copie todo lo que el compilador solicita a su propio directorio de proyectos. Es posible que tenga que juguetear un poco con el diseño de su directorio antes de que funcione. En realidad, se trata de un enfoque paso a paso, donde cada paso es el mismo: identificar el archivo que falta, copiarlo, ver si se encuentra y corregir ese elemento, y continuar con el siguiente paso. Este es un trabajo aburrido, me temo.

Puede automatizar todo esto con bcp, pero para un proyecto aislado como un proyecto escolar no me molestaría; solo si cree que tendrá proyectos futuros que requerirán que entregue un archivo zip autónomo.

+0

Probablemente esté usando Boost en proyectos futuros. Al profesor no le importa – epochwolf

+0

Puedes pasar literalmente horas descubriendo dependencias como esta. [bcp] (http://www.boost.org/doc/libs/1_46_1/tools/bcp/doc/html/index.html) es una forma mucho más infalible de hacerlo. Además, es mucho mejor agregar una ruta de inclusión que editar las rutas de inclusión: hay miles para editar en algunos subconjuntos de potencia. –

0

Es tal un PITA para compilar impulso; solo los estudiantes motivados podrán hacerlo. ¿Has considerado agrupar el instalador?

+0

De hecho, dejé las bibliotecas de depuración compiladas previamente en la carpeta relativa adecuada. – epochwolf

+0

Tengo un conjunto de ellos en mi sitio web: http://boost.teeks99.com – teeks99

Cuestiones relacionadas