2009-02-12 10 views
12

Estoy usando para administrar mis compilaciones multiplataforma, y ​​tengo todo resuelto a excepción de este problema. Configuré RUNTIME_OUTPUT_DIRECTORY en un directorio bin/ donde tengo almacenados los archivos de datos. En Linux, esto funciona bien. En Windows, los ejecutables se colocan en el subdirectorio Debug/Release según el tipo de compilación. ¿Hay alguna forma de obtener para copiar el ejecutable en el directorio correcto, o (aún mejor) dejar de usar estos subdirectorios por completo?cmake RUNTIME_OUTPUT_DIRECTORY en Windows

+0

supongo que está usando CMake para generar archivos de solución/proyecto de Visual Studio, ¿verdad? ¿Qué versión de Visual Studio se usa? ¿Qué versión de cmake? –

+0

Sí, estoy usando CMake para generar los archivos de solución (cmake 2.6, VS 2005) – thekidder

Respuesta

9

He estado utilizando el hack de propiedad de prefijo fino reportado por Ogapo durante años. Funciona.

Pero a partir de CMake versión 2.8, hay soporte oficial para evitar los subdirectorios Release/Debug en Windows.

utilizar el globales CMAKE_<ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> variables, o los per-objetivo <ARTIFACT>_OUTPUT_DIRECTORY_<CONFIGURATION> propiedades, así:

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

No he buscado una solución. Y encontré esta respuesta y, al mismo tiempo, encontré este enlace: https://cmake.org/Bug/view.php?id=9163. Esta respuesta usa exactamente la misma técnica. Creo que esta respuesta es la mejor solución hasta ahora. Funciona muy bien para mí. Gracias. –

-4

Necesita cambiar la ubicación de compilación de sus 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 como éste es que no sé acerca de CMake.

Usted puede utilizar el siguiente token en Visual Studio crear eventos:

$(TargetPath)

Ésta será la ruta a la ubicación que su proyecto se construye a lo que dependiendo de la configuración del proyecto, esta podrá ser el Carpeta Debug o Release.

1

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 existen estos VARs, pero tal vez el establecimiento de RUNTIME_OUTPUT_DIRECTORY_DEBUG & & RUNTIME_OUTPUT_DIRECTORY_RELEASE a la misma cosa podría funcionar.

10

No estoy seguro de si estos directorios son intencionales o un insecto, pero con el riesgo de incompatibilidad adelante se podría añadir:

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í

+2

Esto también funciona bien para mí. Para los archivos .lib, use SET_TARGET_PROPERTIES ($ {PROJECT_NAME} PROPERTIES IMPORT_PREFIX "../") – Torleif

1

Hasta el momento, la mejor La respuesta que he encontrado es simplemente escribir CMake install commands para cada uno de mis destinos 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.

1

Para mí un mundial:

set(CMAKE_STATIC_LIBRARY_PREFIX "../lib") 
set(CMAKE_SHARED_LIBRARY_PREFIX "../lib") 

hizo el trabajo, por lo que no tiene que configurarlo para cada biblioteca (CMake 2.8.4)