[CMake] Add Custom COmmand and CMAKE_CFG_INTDIR

Michael Jackson mike.jackson at bluequartz.net
Wed Jan 4 16:27:22 EST 2012


Thanks! The definitely fixed the issue for ALL the platforms. I guess I just have not been keeping up with all the additions to CMake. At what version was this syntax introduced?
--
Mike Jackson <www.bluequartz.net>

On Jan 4, 2012, at 4:11 PM, Bill Hoffman wrote:

> On 1/4/2012 4:03 PM, Michael Jackson wrote:
>> I robbed this from the HDF5 project which does something very similar to what I am doing:
>> 
>> SET (CMD ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}${CFG_INIT}/H5detect${EXE_EXT})
>> 
>> That "seems" to at least point to the proper location. Now to get Visual Studio to actually execute the executable.
> That is pretty old stuff...
> 
> There are better ways to do that in CMake now:
> 
> cmake --help-command add_custom_command
> ....
> 
>       Arguments to COMMAND may use "generator expressions" with the syntax
>       "$<...>".  Generator expressions are evaluted during build system
>       generation to produce information specific to each build
>       configuration.  Valid expressions are:
> 
>         $<CONFIGURATION>          = configuration name
>         $<TARGET_FILE:tgt>        = main file (.exe, .so.1.2, .a)
>         $<TARGET_LINKER_FILE:tgt> = file used to link (.a, .lib, .so)
>         $<TARGET_SONAME_FILE:tgt> = file with soname (.so.3)
> 
> This should work:
>  COMMAND $<TARGET_FILE:FilterWidgetCodeGen>
> 
> -Bill
> 
> 
> 
>> --
>> Mike Jackson<www.bluequartz.net>
>> 
>> On Jan 4, 2012, at 3:54 PM, clinton at elemtech.com wrote:
>> 
>>> Have you tried excluding the ".exe" thing?  I thought cmake did the right thing for targets used in custom commands.
>>> 
>>> Clint
>>> 
>>> ----- Reply message -----
>>> From: "Michael Jackson"<mike.jackson at bluequartz.net>
>>> Date: Wed, Jan 4, 2012 1:28 pm
>>> Subject: [CMake] Add Custom COmmand and CMAKE_CFG_INTDIR
>>> To: "cmake at cmake.org List"<cmake at cmake.org>
>>> 
>>> I am having trouble getting add_custom_Command and CMAKE_CFG_INTDIR to work correctly together. This is what I have so far.
>>> 
>>> # ---------- Setup output Directories -------------------------
>>> SET (CMAKE_LIBRARY_OUTPUT_DIRECTORY
>>>  ${PROJECT_BINARY_DIR}/Bin
>>>  CACHE PATH
>>>  "Single Directory for all Libraries"
>>>  )
>>> 
>>> # Create our custom executable that will generate most of our QFilterWidget
>>> # classes from information stored in the Filters themselves.
>>> configure_file( ${FilterWidgets_SOURCE_DIR}/CodeGen.cpp.in
>>>                ${FilterWidgets_BINARY_DIR}/FilterWidgetCodeGen.cpp)
>>> add_executable(FilterWidgetCodeGen ${FilterWidgets_BINARY_DIR}/FilterWidgetCodeGen.cpp)
>>> target_link_libraries(FilterWidgetCodeGen MXA EbsdLib DREAM3DLib)
>>> set(EXE_EXTENSION "")
>>> if (WIN32)
>>>  set (EXE_EXTENSION ".exe")
>>> endif()
>>> # Now run the code to generate the header files which will over write the place
>>> # holder files that were generated from above
>>> add_custom_command(TARGET FilterWidgetCodeGen POST_BUILD
>>>            COMMAND FilterWidgetCodeGen${EXE_EXTENSION}
>>>            WORKING_DIRECTORY ${CMAKE_LIBRARY_OUTPUT_DIRECTORY})
>>> 
>>> 
>>> I know this is going to fail on visual studio, which it did. The issue is, what combination of CMAKE_CFG_INTDIR and anything else do I use to get this to work?
>>> 
>>> Thanks
>>> ___________________________________________________________
>>> Mike Jackson                    Principal Software Engineer
>>> BlueQuartz Software                            Dayton, Ohio
>>> mike.jackson at bluequartz.net              www.bluequartz.net
>>> 



More information about the CMake mailing list