Lets assume for a second that your layout is something like:
Project
src
-sub1
--CMakeLists.txt
--sub1.cpp
--sub1.ui
-sub2
--CMakeLists.txt
--sub2.cpp
What you would want quite possible is a top level CMakeLists.txt file
Like this:
PROJECT (MyGreatProject)
SET (LIBRARY_OUTPUT_PATH "${PROJECT_BINARY_DIR}/Bin" CACHE INTERNAL
"For libraries.")
SET (EXECUTABLE_OUTPUT_PATH "${PROJECT_BINARY_DIR}/Bin" CACHE
INTERNAL "For executables.")
#--- All the generated .h and .cpp files end up in $
{CMAKE_CURRENT_BINARY_DIR}
#--- so include that directory.
INCLUDE_DIRECTORIES( "${CMAKE_CURRENT_BINARY_DIR}" )
ADD_SUBDIRECTORY( src/sub1)
ADD_SUBDIRECTORY( src/sub2)
#--- End CMakeLists.txt file
The above _should_ work although I just did it from memory.
Mike Jackson
On Feb 17, 2008, at 10:36 AM, blinkeye wrote:
Hi guys
I'm in the process of replacing Makefiles from two large projects
with CMake files. So far it's working great, but now I hit a wall:
I need to generate .cpp and .h files from input files (analogue to
the .ui files of Qt).
Bill Hofmann wrote the following QT4_WRAP_UI macro:
MACRO (QT4_WRAP_UI outfiles )
FOREACH (it ${ARGN})
GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_UIC_EXECUTABLE}
ARGS -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile})
SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it)
ENDMACRO (QT4_WRAP_UI)
I'm using just a slightly adapted form of this macro. The problem
is that our project includes the generated header files from
different subdirectories and I can't figure out on how to include
them.
Imagine the following project layout:
src
-sub1
--CMakeLists.txt
--sub1.cpp
--sub1.ui
-sub2
--CMakeLists.txt
--sub2.cpp
${QT_UIC_EXECUTABLE} will read sub1.ui and generate a file like
"ui_sub1.h". sub1.cpp and sub2.cpp both include the file
"ui_sub1.h". While above macro works for sub1 it doesn't work for
sub2:
make
[ 20%] Generating ui_sub1.h
[ 40%] Generating moc_sub1.cxx
Scanning dependencies of target sub1
[ 60%] Building CXX object src/sub1/CMakeFiles/sub1.dir/sub1.o
[ 80%] Building CXX object src/sub1/CMakeFiles/sub1.dir/moc_sub1.o
Linking CXX executable sub1
[ 80%] Built target sub1
Scanning dependencies of target sub2
[100%] Building CXX object src/sub2/CMakeFiles/sub2.dir/sub2.o
/home/cerberos/Desktop/mutacts/dan/src/sub2/sub2.cpp:4:21: error:
ui_sub1.h: No such file or directory
make[2]: *** [src/sub2/CMakeFiles/sub2.dir/sub2.o] Error 1
make[1]: *** [src/sub2/CMakeFiles/sub2.dir/all] Error 2
make: *** [all] Error 2
I tried for hours but I can't figure out a proper (or at least
working) way on how to achieve that. Changing above macro to
include the path of the generated header files doesn't seem to make
a difference:
MACRO (QT4_WRAP_UI_CUSTOM outfiles )
FOREACH (it ${ARGN})
GET_FILENAME_COMPONENT(outfile ${it} NAME_WE)
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/ui_${outfile}.h)
include_directories( ${CMAKE_CURRENT_BINARY_DIR} )
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_UIC_EXECUTABLE}
ARGS -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile})
SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it)
ENDMACRO (QT4_WRAP_UI_CUSTOM)
For some reason the included directory is lost in sub2 again (btw:
is there a way to log the currently included directories besides
analysing the make output?).
I've attached above mentioned mini project.
Thanks for any help.
<demo.zip>_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake
--
Mike Jackson Senior Research Engineer
Innovative Management & Technology Services
_______________________________________________
CMake mailing list
[email protected]
http://www.cmake.org/mailman/listinfo/cmake