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
cmakesi 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
Makefilemanual, puede generar unaSRCSvariable usando una función para seleccionar todos.cppy.harchivos. Si luego se agrega un archivo de origen, volver a ejecutarlomakelo 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 generarloMakefilevolviendo 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