Is there any particular reason why you didn't generate the cpp files to the CMAKE_CURRENT_BINARY_DIR? That's generally the way to go for generated files - writing to the source tree falls under the "big no-no" category.

You can create a custom target for the tolua files, with this function - not sure if it will give you the exact interaction with vs that you want, but it might be closer. The call will now be wrap_tolua(myLib TOLUA_WRAPPED_SRC math.pkg another.pkg) and it will create a target/project that shows all of the .pkg files as sources, for easy editing, and might let you right-click and build that way. (At the very least, a "build solution" should only re-wrap the pkgs that have changed.)

function(wrap_tolua targetname outvar)
    set(outfiles)
    foreach(in ${ARGN})
        get_filename_component(inAbs ${in} ABSOLUTE)
        get_filename_component(basename ${in} NAME_WE)
        get_filename_component(path ${in} PATH)
        file(MAKE_DIRECTORY ${path}/generated)
        set(outfile "${path}/generated/generated_${basename}.cpp")
        list(APPEND outfiles "${outfile}")
        add_custom_command(OUTPUT "${outfile}"
COMMAND ${TOLUA_EXECUTABLE} -o "${outfile}" -n ${basename} "${inAbs}" -L "lua/access_hook.lua"
            DEPENDS "${inAbs}"
            WORKING_DIRECTORY "${path}"
            COMMENT "Wrapping ${basename} with tolua")
    endforeach()
    set(${outvar} ${outfiles} PARENT_SCOPE)
    add_custom_target(${targetname}_tolua
        DEPENDS ${outfiles}
        SOURCES ${ARGN})
endfunction()


On 9/1/10 9:37 AM, Anders Backman wrote:
That was very close to what I wanted. But not to 100%, Im not sure if it is possible to get to what I really want:

On one hand, I get one build rule for each tolua file, but it was not associated to the actual tolua file. So I cannot do right click->compile on the .pkg file.

I can however go further down, locate the matching rule, right click on that and compile. So for a large project with hundred of .pgk file, this is not optimal. I would like to be able to do ctrl+F7 to compile the current file for example...

Some slight modifications was needed on the function:

FUNCTION (wrap_tolua outvar)
    set(outfiles)
    foreach(in ${ARGN})
        get_filename_component(inAbs ${in} ABSOLUTE)
        get_filename_component(basename ${in} NAME_WE)
        get_filename_component(path ${in} PATH)
        file(MAKE_DIRECTORY ${path}/generated)
        set(outfile "${path}/generated/generated_${basename}.cpp")
        list(APPEND outfiles "${outfile}")
        add_custom_command(OUTPUT "${outfile}"
COMMAND ${TOLUA_EXECUTABLE} -o "${outfile}" -n ${basename} "${inAbs}" -L "lua/access_hook.lua"
            DEPENDS "${inAbs}"
            WORKING_DIRECTORY "${path}"
            COMMENT "Wrapping ${basename} with tolua")
    endforeach()
    set(${outvar} ${outfiles} PARENT_SCOPE)
endfunction()

So unless someone knows how to add a file to a library, associate it with a custom build command, this is what I have to stick to.

/Anders

On Tue, Aug 31, 2010 at 10:38 PM, Ryan Pavlik <[email protected] <mailto:[email protected]>> wrote:

    You were close:

    here's a function to handle the wrapping - could stick this in the
    Findtolua.cmake file that you've hopefully made.

    function wrap_tolua(outvar)
        set(outfiles)
        foreach(in ${ARGN})
            get_filename_component(inAbs ${in} ABSOLUTE)
            get_filename_component(basename ${in} NAME_WE)
            set(outfile
    "${CMAKE_CURRENT_BINARY_DIR}/generated_${basename}.cpp")
            list(APPEND outfile "${outfile}")
            add_custom_command(OUTPUT "${outfile}"
                COMMAND ${TOLUA_EXECUTABLE} -o "${outfile}" -n
    ${basename} "${inAbs}"
                DEPENDS "${inAbs}"
                COMMENT "Wrapping ${basename} with tolua")
        endforeach()
        set(${outvar} ${outfiles} PARENT_SCOPE)
    endfunction()


    Then, to do your example:

    find_package(tolua REQUIRED)

    wrap_tolua(TOLUA_WRAPPED_SRC math.pkg another.pkg)
    add_library(myLib theMain.cpp ${TOLUA_WRAPPED_SRC})

    (This is similar to how Qt and FLTK builds take place.)

    Hope this helps!  Please share your find module with this code
    added and tweaked, if needed - thanks!

    Ryan


    On 08/31/2010 02:44 PM, Anders Backman wrote:
    Hi all.

    I have a directory of .pkg files to be processed by tolua. This
    in turn generates a bunch of cpp files, which I then link into a
    library.

    My problem right now is that, I would like to generate a project,
    where each .pkg is associated with a custom command, so that I in
    visual studio (for exampel) can "compile" each .pkg file
    individually.

    I have managed to create a library, and to get all the generated
    cpp file associated to the library+a custom target command which
    is executed PRE_BUILD to the library.
    But thats not quite what I would like. Because then I cant just
    compile one .pkg file if I edit it. Using the above approach,
    requires me to build the whole project, which compiles ALL .pkg
    files associated to it, not what I want. I want to setup a proper
    dependency chain, so that If a .pkg file is modified, the
    corresponding "generated"_xx.cpp is generated, and the project is
    linked.

    So I guess Im looking for something like:

    add_library(myLib theMain.cpp
       generated_math.cpp
       math.pkg
    )

    set_source_files_properties(generated_math.cpp GENERATED)

    being able to tell CMake that .pkg files are treated in a certain
    way:
    The command that I want to execute for each .pkg is:

    tolua -o generated_math.cpp -n math math.pkg

    So any hints on how to do this?
    I can certainly do this in VisualStudio, adding .pkg files to the
    project, and setting the build events on it, but I need a
    portable solution...

    /A


--
Ryan Pavlik
Human-Computer Interaction Graduate Student
Virtual Reality Applications Center
Iowa State University

http://academic.cleardefinition.com/

_______________________________________________
Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://www.cmake.org/mailman/listinfo/cmake

Reply via email to