Estoy considerando cambiar un proyecto multiplataforma de sistemas de administración de compilación separados en Visual C ++, XCode y makefiles a CMake.
Una característica esencial que necesito es agregar automáticamente todos los archivos en un directorio a un destino. Si bien esto es fácil de hacer con make, no es fácil de hacer con Visual C ++ y XCode (corrígeme si estoy equivocado). ¿Es posible hacerlo directamente en CMake? ¿Cómo?
c++
cross-platform
cmake
martjno
fuente
fuente
Respuestas:
Es posible. Por ejemplo con
file(GLOB
:Tenga en cuenta que esto requiere una ejecución manual
cmake
si se agrega o elimina un archivo fuente, ya que el sistema de compilación generado no sabe cuándo pedirle a CMake que se regenere, y hacerlo en cada compilación aumentaría el tiempo de compilación.fuente
GLOB
:file(GLOB_RECURSE variable [RELATIVE path] [FOLLOW_SYMLINKS] [globbing expressions]...)
.La respuesta de Kleist ciertamente funciona, pero hay una advertencia importante:
Cuando escribe un
Makefile
manual, puede generar unaSRCS
variable usando una función para seleccionar todos.cpp
y.h
archivos. Si luego se agrega un archivo de origen, volver a ejecutarlomake
lo incluirá.Sin embargo, CMake (con un comando como
file(GLOB ...)
) generará explícitamente una lista de archivos y la colocará en el autogeneradoMakefile
. Si tiene un nuevo archivo fuente, deberá volver a generarloMakefile
volviendo a ejecutarlocmake
.editar: no es necesario eliminar el Makefile.
fuente
Extensión para la respuesta @Kleist :
Desde CMake 3.12, la opción adicional CONFIGURE_DEPENDS es compatible con comandos
file(GLOB)
yfile(GLOB_RECURSE)
. Con esta opción hay ninguna necesidad a manualmente volver a ejecutar CMake después de la adición / eliminación de un archivo de origen en el directorio - CMake se volverá a funcionar automáticamente en la próxima construcción del proyecto.Sin embargo, la opción CONFIGURE_DEPENDS implica que el directorio correspondiente se volverá a verificar cada vez que se solicite la construcción, por lo que el proceso de construcción consumiría más tiempo que sin CONFIGURE_DEPENDS .
Incluso con la opción CONFIGURE_DEPENDS disponible, la documentación de CMake todavía no recomienda usar
file(GLOB)
ofile(GLOB_RECURSE)
recopilar las fuentes.fuente
file(GLOB)
ofile(GLOB_RECURSE)
para recopilar las fuentes" ¿Qué recomiendan entonces? ¿Usa algo más para recopilar las fuentes o para enumerar manualmente cada archivo fuente?Entonces, ¿por qué no usar powershell para crear la lista de archivos fuente para usted? Echa un vistazo a este script
Supongamos que tiene una carpeta con esta estructura
Ahora guarde este archivo como "generateSourceList.ps1", por ejemplo, y ejecute el script como
El archivo out.txt contendrá
fuente