[CMake] CMAKE_CFG_INTDIR expands to "$"(OutDir)
Andrew Maclean
andrew.amaclean at gmail.com
Mon Sep 17 19:21:41 EDT 2007
I think setting LIBRARY_OUTPUT_PATH instead only works on the libraries you
build. I also need to copy configuration files etc. so ... how about
something like this:
(Note the the explicit specification of "Debug and release in the WIN32
section.)
#-------------------------- Start of code ----------------------
IF ( WIN32 )
# Only needed for windows.
# Note: We need to copy the dlls to two places in the build tree, namely
# ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}
IF(NOT STATIC_BUILD)
# Find the dlls we need.
FIND_FILE(LIBPQ_DLL libpq.dll PATHS ${POSTGRESQL_LIBRARY_DIRS}
NO_DEFAULT_PATH )
FIND_FILE(LIBPQD_DLL libpqd.dll PATHS ${POSTGRESQL_LIBRARY_DIRS}
NO_DEFAULT_PATH )
FIND_FILE(LIBPQXX_DLL libpqxx.dll PATHS ${LIBPQXX_LIBRARY_DIRS}
NO_DEFAULT_PATH )
FIND_FILE(LIBPQXXD_DLL libpqxxD.dll PATHS ${LIBPQXX_LIBRARY_DIRS}
NO_DEFAULT_PATH )
SET ( ESSENTIAL_FILES ${ESSENTIAL_FILES}
${LIBPQ_DLL}
${LIBPQXX_DLL}
)
SET ( ESSENTIAL_FILES_DEBUG ${ESSENTIAL_FILES_DEBUG}
${LIBPQD_DLL}
${LIBPQXXD_DLL}
)
ENDIF(NOT STATIC_BUILD)
# Copy these files to the build tree.
# We cannot determine whether Release or Debug is being used.
ADD_CUSTOM_TARGET(CopyDllCfg ALL echo "Copying dlls and essential files
...")
FOREACH(file ${ESSENTIAL_FILES_DEBUG})
GET_FILENAME_COMPONENT(fn ${file} NAME)
SET(tgt ${EXECUTABLE_OUTPUT_PATH}/Debug/${fn})
SET(src ${file})
ADD_CUSTOM_COMMAND(
TARGET CopyDllCfg
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different ${src} ${tgt}
COMMENT "source copy dlls and essential files"
)
ENDFOREACH(file)
FOREACH(file ${ESSENTIAL_FILES})
GET_FILENAME_COMPONENT(fn ${file} NAME)
SET(tgt ${EXECUTABLE_OUTPUT_PATH}/Release/${fn})
SET(src ${file})
ADD_CUSTOM_COMMAND(
TARGET CopyDllCfg
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different ${src} ${tgt}
COMMENT "source copy dlls and essential files"
)
ENDFOREACH(file)
ELSE ( WIN32 )
# Copy these files to the build tree.
ADD_CUSTOM_TARGET(CopyCfg ALL echo "Copying dlls and essential files ...")
FOREACH(file ${ESSENTIAL_FILES})
GET_FILENAME_COMPONENT(fn ${file} NAME)
SET(tgt ${EXECUTABLE_OUTPUT_PATH}/${CMAKE_CFG_INTDIR}/${fn})
SET(src ${file})
ADD_CUSTOM_COMMAND(
TARGET CopyCfg
COMMAND ${CMAKE_COMMAND}
ARGS -E copy_if_different ${src} ${tgt}
COMMENT "source copy essential files"
)
ENDFOREACH(file)
ENDIF ( WIN32 )
#-------------------------- End of code -----------------------
Regards
Andrew
On 9/18/07, McKay Davis <mckayd at yahoo.com> wrote:
>
> I'm experiencing trouble getting cmake to copy DLL files to my executable
> output path in visual studio after the target is built.
>
> It seems that the CMAKE_CFG_INTDIR variable is being expanded to:
> "$"(OutDir)
>
> This causes the .dll files to be copied to the filename '$(OutDir)', not
> into
> the 'Debug' or 'Release' sub-directory as I would expect.
>
> Here is the relevant cmake code:
>
> IF(WIN32)
> FILE(GLOB QT_DLLS "${QT_LIBRARY_DIR}/../bin/*.dll")
>
> GET_FILENAME_COMPONENT(PTHREAD_LIBRARY_DIR "${PTHREAD_LIBRARY}" PATH)
> FILE(GLOB PTHREAD_DLLS "${PTHREAD_LIBRARY_DIR}/*.dll")
>
> SET(DESTINATION ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_CFG_INTDIR})
>
> FOREACH(DLL_FILENAME ${QT_DLLS} ${PTHREAD_DLLS})
> ADD_CUSTOM_COMMAND(
> TARGET ${PROJECT_NAME}
> POST_BUILD
> COMMAND ${CMAKE_COMMAND} -E copy
> ${DLL_FILENAME} ${DESTINATION}
> VERBATIM)
> MESSAGE(COPY ${DLL_FILENAME} ${DESTINATION})
> ENDFOREACH(DLL_FILENAME)
> ENDIF(WIN32)
>
>
> And here are a few lines from my VC++ buildlog.htm:
>
> "C:\Program Files (x86)\CMake 2.4\bin\cmake.exe" -E copy
> C:/Qt/4.3.1/lib/../bin/QtXml4.dll C:/bin/viewer/"$"(OutDir)
>
> "C:\Program Files (x86)\CMake 2.4\bin\cmake.exe" -E copy
> C:/Qt/4.3.1/lib/../bin/QtXmld4.dll C:/bin/viewer/"$"(OutDir)
>
>
> For some reason either cmake is quoting the $ in the expansion of the
> ${CMAKE_CFG_INTDIR} variable. Does anyone know a fix for this?
>
> -McKay D
>
>
>
>
>
>
> ____________________________________________________________________________________
> Don't let your dream ride pass you by. Make it a reality with Yahoo!
> Autos.
> http://autos.yahoo.com/index.html
>
>
>
> _______________________________________________
> CMake mailing list
> CMake at cmake.org
> http://www.cmake.org/mailman/listinfo/cmake
>
--
___________________________________________
Andrew J. P. Maclean
Centre for Autonomous Systems
The Rose Street Building J04
The University of Sydney 2006 NSW
AUSTRALIA
Ph: +61 2 9351 3283
Fax: +61 2 9351 7474
URL: http://www.acfr.usyd.edu.au/
___________________________________________
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://public.kitware.com/pipermail/cmake/attachments/20070918/25df86dd/attachment.htm
More information about the CMake
mailing list