visual studio - tutorial - cmake RUNTIME_OUTPUT_DIRECTORY en Windows
cmake visual studio (7)
Estoy usando cmake para administrar mis compilaciones multiplataforma, y lo tengo todo resuelto a excepción de este problema. Establecí RUNTIME_OUTPUT_DIRECTORY
en un bin/
directorio donde tengo almacenados los archivos de datos. En Linux, esto funciona bien. En Windows, los ejecutables se colocan en el subdirectorio Debug
/ Release
dependiendo del tipo de compilación. ¿Hay alguna forma de hacer que cmake copie el ejecutable en el directorio correcto, o (aún mejor) deje de usar estos subdirectorios?
Encontré algunas buenas discusiones sobre este tema:
http://www.cmake.org/pipermail/cmake/2008-April/021355.html
http://www.vtk.org/Bug/bug_view_advanced_page.php?bug_id=8366
¿Sería posible usar la EXECUTABLE_OUTPUT_PATH en desuso en lugar de RUNTIME_OUTPUT_DIRECTORY ? No estoy seguro de qué funcionalidad ha cambiado entre los 2, pero podría valer la pena intentarlo.
Algunas variables de cmake tienen versiones específicas de compilación.
CMAKE_C_FLAGS
the compiler flags for compiling C sources. Note you can also specify switches with ADD_DEFINITIONS().
CMAKE_C_FLAGS_DEBUG
compiler flags for compiling a debug build from C sources.
CMAKE_C_FLAGS_RELEASE
compiler flags for compiling a release build from C sources.
CMAKE_C_FLAGS_RELWITHDEBINFO
compiler flags for compiling a release build with debug flags from C sources.
No he verificado que existan estos vars, pero quizás configurar RUNTIME_OUTPUT_DIRECTORY_DEBUG
&& RUNTIME_OUTPUT_DIRECTORY_RELEASE
en la misma cosa funcione.
No estoy seguro de si estos directorios son intencionales o un error, pero a riesgo de incompatibilidad directa podría agregar:
if (MSVC_IDE)
# hack to get around the "Debug" and "Release" directories cmake tries to add on Windows
set_target_properties (${NAME} PROPERTIES PREFIX "../")
endif()
esto ha estado trabajando para mí
Hasta ahora, la mejor respuesta que he encontrado es simplemente escribir los comandos de instalación de CMake para cada uno de mis objetivos y archivos de datos, y configurar el depurador MSVC para que se quede sin el directorio de instalación. Esto tiene el beneficio adicional de usar CPack para crear instaladores.
Para mí, un global:
set(CMAKE_STATIC_LIBRARY_PREFIX "../lib")
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib")
hice el trabajo, así que no tengo que configurarlo para cada biblioteca (CMake 2.8.4)
Debes cambiar la ubicación de compilación de tus proyectos de estudio visual. Vaya a Propiedades del proyecto y en la pestaña Compilar especifique la ''Ruta de salida de compilación'' para que esté donde desee.
Nota
No sé qué tan relevante es esto, ya que no sé sobre CMake.
Puede usar el siguiente token en los eventos de compilación de Visual Studio:
$(TargetPath)
Esta será la ruta a la ubicación en la que está construido su proyecto, por lo que dependiendo de la configuración de su proyecto, esta será la carpeta Depurar o Liberar.
He estado usando el truco de propiedad de prefijo fino informado por Ogapo durante años. Funciona.
Pero desde CMake versión 2.8, hay soporte oficial para evitar los subdirectorios Release / Debug en Windows.
Utilice las CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
globales CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
o las CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION>
por destino, como las siguientes:
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_LIBRARY_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_DEBUG "${OUTPUT_DIRECTORY}")
SET( CMAKE_ARCHIVE_OUTPUT_DIRECTORY_RELEASE "${OUTPUT_DIRECTORY}")