MantisBT - CMake
View Issue Details
0014706CMakeCMakepublic2014-01-17 15:112014-06-02 08:38
Luis Vega 
 
normalmajoralways
closedno change required 
LinuxUbuntu13.10
CMake 2.8.11.2 
 
0014706: Sources compiled multiple times when building with make, multiple jobs, and targets with common dependencies
A source file will be compiled multiple times when the following combination of conditions are met:
-Using gnu make to build the project.
-Two targets that have a common dependency are specified to the make command.
-Using multiple jobs.

If targets "foo" and "bar" depend on target "dep" and a build command is issued as:
make -j foo bar
Then "dep" sources will be compiled twice.
Create library target "dep"
Create executable target "foo" and link to "dep"
Create executable target "bar" and link to "dep"
Create gnu makefiles with cmake
Issue build command as: make -j foo bar

Output will show that each "dep" source was compiled twice (once per target that depends on "dep").
No tags attached.
gz example.tar.gz (660) 2014-01-17 15:11
https://public.kitware.com/Bug/file/5047/example.tar.gz
Issue History
2014-01-17 15:11Luis VegaNew Issue
2014-01-17 15:11Luis VegaFile Added: example.tar.gz
2014-01-17 15:23Brad KingNote Added: 0034955
2014-01-17 15:23Brad KingStatusnew => resolved
2014-01-17 15:23Brad KingResolutionopen => no change required
2014-06-02 08:38Robert MaynardNote Added: 0036086
2014-06-02 08:38Robert MaynardStatusresolved => closed

Notes
(0034955)
Brad King   
2014-01-17 15:23   
Passing multiple levels to the top-level "make -j" invocation was only recently made to work with GNU make (and not yet in a release). See issue 0014312.

For now just use "make -j foo && make -j bar".

Sources are compiled once for each target that contains them by design. Each target may use different flags. If you want the same source in multiple executables then use a static library to build them.
(0036086)
Robert Maynard   
2014-06-02 08:38   
Closing resolved issues that have not been updated in more than 4 months.