[CMake] Fwd: Adding custom directories to PATH enviroment
Michael Wild
themiwi at gmail.com
Thu Apr 14 03:35:32 EDT 2011
On 04/14/2011 09:31 AM, Gabriele Greco wrote:
>
> You're right about the explicit listing, but you should do the copying
> using configure_file(... COPYONLY). And don't even think about using
> file(GLOB) and friends, that's usually the wrong approach.
>
>
> The problem is that those files can be modified by the user and in that
> case obviously the sources should be recompiled, so I ended with an
> approach similar to the one for the .idl interfaces, the only thing I
> don't like is that those small targets are listed as % points of the
> progress of the build, anyway it's really impressive the flexibility of
> cmake!
>
>
> MACRO (MACRO_ADD_CUSTOMIZED)
> FOREACH(_in_FILE ${ARGN})
>
> GET_FILENAME_COMPONENT(_out_DIR ${_in_FILE} PATH)
> GET_FILENAME_COMPONENT(_out_FILE ${_in_FILE} NAME_WE)
>
> ADD_CUSTOM_COMMAND(
> OUTPUT ${PROJECT_BINARY_DIR}/inc/intf/${_out_DIR}/${_out_FILE}.h
> DEPENDS ${PROJECT_SOURCE_DIR}/inc/intf/${_in_FILE}
> COMMAND mkdir -p "${PROJECT_BINARY_DIR}/inc/intf/${_out_DIR}"
> COMMAND cp "${PROJECT_SOURCE_DIR}/inc/intf/${_in_FILE}"
> "${PROJECT_BINARY_DIR}/inc/intf/${_out_DIR}"
> )
>
> SET_SOURCE_FILES_PROPERTIES(
> ${PROJECT_BINARY_DIR}/inc/intf/${_out_DIR}/${_out_FILE}.h
> PROPERTIES
> GENERATED TRUE
> )
>
> ADD_CUSTOM_TARGET(${_out_FILE} DEPENDS
> ${PROJECT_BINARY_DIR}/inc/intf/${_out_DIR}/${_out_FILE}.h)
>
> add_dependencies(idl ${_out_FILE} )
> ENDFOREACH(_in_FILE ${ARGN})
>
>
> MACRO_ADD_CUSTOMIZED(AckNak/AckNakImpl.h
> GlacToGcrf/GlacToGcrfImpl.h SfdToVld/SfdToVldImpl.h
> AckNak/AckNakIntf.h GlacToGcrf/GlacToGcrfIntf.h
> SfdToVld/SfdToVldIntf.h
> FromASII/FromASIIImpl.h GlacToGtr/GlacToGtrImpl.h
> SubToMaster/SubToMasterImpl.h
> FromASII/FromASIIIntf.h GlacToGtr/GlacToGtrIntf.h
> SubToMaster/SubToMasterIntf.h
> FromGRL/FromGRLImpl.h GrfToGcrf/GrfToGcrfImpl.h
> SupvToMonitor/SupvToMonitorImpl.h
> FromGRL/FromGRLIntf.h GrfToGcrf/GrfToGcrfIntf.h
> SupvToMonitor/SupvToMonitorIntf.h
> FromTLP/FromTLPImpl.h GtlrToGtr/GtlrToGtrImpl.h
> TechInterface/TechInterfaceImpl.h
> FromTLP/FromTLPIntf.h GtlrToGtr/GtlrToGtrIntf.h
> TechInterface/TechInterfaceIntf.h
> FromTTL/FromTTLImpl.h GtrToGcfg/GtrToGcfgImpl.h
> ToASII/ToASIIImpl.h
> FromTTL/FromTTLIntf.h GtrToGcfg/GtrToGcfgIntf.h
> ToASII/ToASIIIntf.h
> GcfgToGfg/GcfgToGfgImpl.h GtrToGcrf/GtrToGcrfImpl.h
> ToCLK/ToCLKImpl.h
> GcfgToGfg/GcfgToGfgIntf.h GtrToGcrf/GtrToGcrfIntf.h
> ToCLK/ToCLKIntf.h
> GcfgToGtr/GcfgToGtrImpl.h GtrToGcrl/GtrToGcrlImpl.h
> ToGprotoIdle/ToGprotoIdleImpl.h
> GcfgToGtr/GcfgToGtrIntf.h GtrToGcrl/GtrToGcrlIntf.h
> ToGprotoIdle/ToGprotoIdleIntf.h
> GcrfToGlac/GcrfToGlacImpl.h GtrToGlac/GtrToGlacImpl.h
> ToGprotoNull/ToGprotoNullImpl.h
> GcrfToGlac/GcrfToGlacIntf.h GtrToGlac/GtrToGlacIntf.h
> ToGprotoNull/ToGprotoNullIntf.h
> GcrfToGrf/GcrfToGrfImpl.h GtrToGmsg/GtrToGmsgImpl.h
> ToGprotoReady/ToGprotoReadyImpl.h
> GcrfToGrf/GcrfToGrfIntf.h GtrToGmsg/GtrToGmsgIntf.h
> ToGprotoReady/ToGprotoReadyIntf.h
> GcrfToGtr/GcrfToGtrImpl.h GtrToGtlr/GtrToGtlrImpl.h
> ToTLP/ToTLPImpl.h
> GcrfToGtr/GcrfToGtrIntf.h GtrToGtlr/GtrToGtlrIntf.h
> ToTLP/ToTLPIntf.h
> GcrlToGrl/GcrlToGrlImpl.h MasterToSub/MasterToSubImpl.h
> ToTTL/ToTTLImpl.h
> GcrlToGrl/GcrlToGrlIntf.h MasterToSub/MasterToSubIntf.h
> ToTTL/ToTTLIntf.h
> GcrlToGtr/GcrlToGtrImpl.h MonitorToSupv/MonitorToSupvImpl.h
> VldToProc/VldToProcImpl.h
> GcrlToGtr/GcrlToGtrIntf.h MonitorToSupv/MonitorToSupvIntf.h
> VldToProc/VldToProcIntf.h
> GfgToGcfg/GfgToGcfgImpl.h ProcToVld/ProcToVldImpl.h
> VldToSfd/VldToSfdImpl.h
> GfgToGcfg/GfgToGcfgIntf.h ProcToVld/ProcToVldIntf.h
> VldToSfd/VldToSfdIntf.h
> )
>
> --
> Ing. Gabriele Greco, DARTS Engineering
> Tel: +39-0105761240 Fax: +39-0105760224
> s-mail: Via G.T. Invrea 14 - 16129 GENOVA (ITALY)
configure_file(... COPYONLY) does exactly that. If the source is
modified, CMake is automatically re-run and the file will be copied
again. Creating such a macro is fine (actually, it would be better if it
was a function, though), but then instead of using the
add_custom_command work-around, simply call configure_file. No need for
the custom target and dependencies.
Michael
More information about the CMake
mailing list