[CMake] add_custom_command: regenerate all on modifcation?

Dave Milter davemilter at gmail.com
Fri May 30 04:50:21 EDT 2008


The problem become arris on big project.
It used qt, and when I add new file, it regenerate all stuff,
like moc files, ui_*.h files and so on,
this lead to rebuild corresponding C++ files,
and this is too long for me, and I also do not see, why
this should be so?

So I create smple test project to show the problem:
-------------------------------------------------------------------
PROJECT(test_rebuild)

ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/new_func.hpp
	COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/generate_new_func.sh >
${CMAKE_CURRENT_BINARY_DIR}/new_func.hpp
#	MAIN_DEPENDENCY ${CMAKE_CURRENT_SOURCE_DIR}/generate_new_func.sh
	DEPENDS  ${CMAKE_CURRENT_SOURCE_DIR}/generate_new_func.sh
)

INCLUDE_DIRECTORIES(${CMAKE_CURRENT_BINARY_DIR})

SET(tr_SRCS
#	test.cpp
	foo.cpp
	main.cpp
)

SET(tr_HDRS
#	test.hpp
	foo.hpp
	${CMAKE_CURRENT_BINARY_DIR}/new_func.hpp
)



ADD_EXECUTABLE(test_rebuild
	${tr_SRCS}
	${tr_HDRS}
)
-------------------------------------------------------------------

There is file new_func.hpp generated by generate_new_func.sh script,
there is foo.cpp which depends on new_func.hpp.

test.cpp and test.hpp do not depend on any other files.

But every time when I comment test.cpp test.hpp or uncomment
new_func.hpp regenerated and foo.cpp rebuild happened.

is it possible to fix this behaviour?

I use make file generatation.
>cmake --version
cmake version 2.7-20080530

> cat test.cpp
#include <cstdio>

#include "test.hpp"

void test_func()
{
	printf("%s: begin\n", __func__);
}

>cat foo.cpp
#include <cstdio>

#include "new_func.hpp"
#include "foo.hpp"

Foo::Foo()
{
	printf("%s: begin\n", __func__);
	new_func();
}

>cat build/new_func.hpp
#include <cstdio>
void new_func() { printf("aaa\n"); }


More information about the CMake mailing list