On 09/05/2010 12:04 AM, Joshua Warner wrote:
> Hi,
> 
> I have a small language (written in C++) I'd like to convert to cmake, but
> I'm having a hard time figuring out what to do in which CMakeLists.txt file.
> 
> Basically, I have the following directory structure:
> 
> nvm/
> --tools/
> ----compiler/
> ------(C++ source)
> ----generator/
> ------(C++ source)
> --n/
> ----(".n" source)
> --src/
> ----(C++ source)
> 
> Roughly, a build should go like this:

nvm/CMakeLists.txt:
ADD_SUBDIRECTORY(tools/compiler)
ADD_SUBDIRECTORY(tools/generator)
ADD_SUBDIRECTORY(n)
ADD_SUBDIRECTORY(src)

> 1. Compile the compiler (nvm/tools/compiler/*.cpp)

nvm/tools/compiler/CMakeLists.txt:
ADD_EXECUTABLE(compiler src1.cpp src2.cpp ...)

> 2. Use compiler to compile standard library (nvm/n/.../*.n) to framework.nc

nvm/n/CMakeLists.txt:
SET(NSRCS src1.n src2.n ...)
ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_BINARY_DIR}/framework.nc
    COMMAND compiler -o ${CMAKE_BINARY_DIR}/framework.nc ${NSRCS}
    DEPENDS ${NSRCS})

> 3. Compile the generator (nvm/tools/generator/*.cpp)

nvm/tools/generator/CMakeLists.txt:
ADD_EXECUTABLE(generator src1.cpp src2.cpp ...)

> 4. Use generator to generate framework.cpp and framework.h, from the
> compiled standard library (framework.nc)

nvm/n/CMakeLists.txt:
ADD_CUSTOM_COMMAND(
    OUTPUT ${CMAKE_BINARY_DIR}/framework.cpp
           ${CMAKE_BINARY_DIR}/framework.h
    COMMAND generator -source ${CMAKE_BINARY_DIR}/framework.cpp
                      -header ${CMAKE_BINARY_DIR}/framework.h
                      ${CMAKE_BINARY_DIR}/framework.nc
    DEPENDS ${CMAKE_BINARY_DIR}/framework.nc)
ADD_CUSTOM_TARGET(framework ALL
    DEPENDS ${CMAKE_BINARY_DIR}/framework.cpp
            ${CMAKE_BINARY_DIR}/framework.h)

> 5. Compile vm (src/*.cpp & framework.cpp)

nvm/src/CMakeLists.txt:
ADD_EXECUTABLE(vm src1.cpp src2.cpp ...
    ${CMAKE_BINARY_DIR}/framework.cpp ${CMAKE_BINARY_DIR}/framework.h)
ADD_DEPENDENCIES(vm framework)

> Right now, I'm a bit confused as to which CMakeLists.txt file the rules for
> steps 2 and 4 should go.

Here, the crucial moment is the use of the custom target as a custom
command's output cannot be referred to from another CMakeLists.txt.

Hope that helps.

Regards,

Michael
_______________________________________________
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