Hi,

I am cross-posting this from 
https://forum.qt.io/topic/65483/generating-qtcreator-project-for-cmakelists-txt-from-command-line,
 since it was suggested there that the topic were more appropriate for the 
mailing list. The following is a slightly adapted version of the original  post 
over at forum.qt.io, including now a paragraph talking about how this might 
interact with QtCreator Kits.

I was woundering if it is at all possible to generate a QtCreator project for a 
given `CMakeLists.txt` from command line, i.e. generating the 
`CMakeLists.txt.user` from command line while giving some parameters, such as 
the desired configurations and according build directories.

My use case is the following.

BACKGROUND: 
I am developing software within the ROS [1] framework. One of the many aspects 
of ROS is the `catkin` build system, which makes it easy for you to manage many 
different ROS packages and their depedencies. For example, the latest ROS 
distribution "Jade" has almost 1000 packages released [2]. `catkin` is 
CMake-based, and as such in a typical ROS workspace you might have 10s or even 
>100 CMake projects.

Now while you can use `catkin` with the standard CMake workflow of `mkidr build 
&& cd build && cmake ../src && make`, there also exists a command line tool 
suite `catkin_tools` [3], which aids you in building all catkin/CMake projects 
in your workspace independently, while still respecting the interdependencies. 
As such, it manages the `cmake` invocations and build-locations for each 
package. It also has support for profiles, such that you could handle different 
configurations at the same time (debug, relase, ...).

My current workflow using this together with QtCreator is the following: I use 
`catkin build` to compile all my packages, which also entails calling cmake in 
a specific build directory for each package. Then, whenever I want to work on a 
specific package, I open the `CMakeLists.txt` as a project in QtCreator, but 
need to manually select the correct build directory. If I have different 
profiles, I need to select each of the build directories for the different 
configurations.

DESIRED WORKFLOW:
It would be nice if for a catkin workspace such as described above, I could 
generate QtCreator projects for *all* packages with the appropriate build 
directories set up. For example, to do the same for Eclipse, I can call 
something like `catkin build --force-cmake -G"Eclipse CDT4 - Unix Makefiles"`, 
and then import the generated projects into Eclipse, which is extremely 
convenient. It would be great to be able to generate the QtCreator project 
files in a similar fashion without user intervention.

I think we really only would need to generate the `CMakeLists.txt.user` file. 
The `.cbp` files generated by cmake itself could be created when the user first 
opens the project in QtCreator and invokes cmake through QtCreator. The only 
parameters I currently would want to pass are the configurations and according 
build-directories. 

Note that when the user opens the generated QtCreator project, the build 
directory with cmake-cache etc already exists from the original `catkin build` 
call. As such I would not want QtCreator to inject any configuration into the 
cmake call such as which compiler to use, which Qt version, which version of 
cmake. This seems to conflict somewhat with the concept of Kits in QtCreator. 
What I am looking for here is using QtCreator with some sort of “current 
environment kit”, which should use the compiler, Qt, cmake as defined by the 
current environment, i.e. the same way that `cmake` and `make` (or in fact 
`catkin build`) calls from the command line would do. If this cannot easily be 
done, I think the next best thing would be allowing to select a specific Kit 
(by name) from command line. It would then be the responsibility of the user to 
setup a Kit in QtCreator first that is compatible with the environment on the 
command line.

Does anyone have any input on what would the best way to achieve this? Should 
this be a standalone script/application, or somehow built into qtcreator with a 
specific command line invocation? Would it be easier to utilise the 
cmakeproject-related classes implemented in QtCreator, or generate the xml 
independently? Is there some kind of spec describing the contents of 
`CMakeLists.txt.user`? Is there some way to query information like the 
available Kits from QtCreator from command line in a machine readable form?

Any comments or insights are welcome.

Cheers & Happy Easter everyone,
Niko

[1] http://www.ros.org/
[2] http://repositories.ros.org/status_page/ros_jade_default.html
[3] http://catkin-tools.readthedocs.org/en/latest/index.html
_______________________________________________
Qt-creator mailing list
[email protected]
http://lists.qt-project.org/mailman/listinfo/qt-creator

Reply via email to