visual tutorial studio visual-studio build-process cross-platform cmake

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?



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}")