[cmake-developers] Extracting target metadata, IDE integration
Stephen Kelly
steveire at gmail.com
Fri Dec 19 02:51:39 EST 2014
Aleix Pol wrote:
> Hi,
> I would like to propose this as a final version of this patch.
> http://proli.net/meu/kdevelop/0001-cmake-Add-option-to-generate-target-metadata-for-IDE.patch
>
> I have a working proof of concept in KDevelop already I'm quite happy
> with.
>
> Any thoughts?
Just some quick ones:
1) Getting the right sources:
Consider this:
cmake_minimum_required(VERSION 2.8)
project(cmaketest)
add_custom_command(
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/other.cpp"
COMMAND ${CMAKE_COMMAND} -E copy "${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp"
"${CMAKE_CURRENT_BINARY_DIR}/other.cpp"
MAIN_DEPENDENCY "${CMAKE_CURRENT_SOURCE_DIR}/bar.cpp"
)
file(GENERATE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/somefile.cpp"
CONTENT "
static const char all_srcs[] = \"$<TARGET_PROPERTY:foo,SOURCES>\";\n"
)
add_executable(foo
main.cpp
"${CMAKE_CURRENT_BINARY_DIR}/other.cpp"
somefile.txt
foo.h
)
After running cmake:
$ cat somefile.cpp
static const char all_srcs[] =
"main.cpp;/home/stephen/dev/src/playground/cmake/build/other.cpp;somefile.txt;foo.h;/home/stephen/dev/src/playground/cmake/bar.cpp";
You would get the same result with your patch: "bar.cpp" is a 'SOURCE', but
it is not an 'object source'. It is not compiled into the target.
CMake knows that, and provides cmGeneratorTarget::GetObjectSources to get
'the list of sources compiled into objects by this buildsystem'. You should
list that in your JSON instead.
You might also make use of GetHeaderSources and GetExtraSources at least to
cover foo.h and somefile.txt too, and probably GetExternalObjects too.
2) The final patch will need to have unit tests and documentation.
3) Did you find any of the feedback from the Creator or CLion guys relevant?
I'd have to review the rest of the thread again to see if there's anything
else which should be addressed already by this iteration of the patch.
4) I won't be able to do a complete review before January.
Thanks!
Steve.
More information about the cmake-developers
mailing list