MantisBT - CMake
View Issue Details
0015497CMakeCMakepublic2015-04-06 00:052015-11-02 09:13
Hendy Irawan 
 
normalminoralways
closedno change required 
Linux amd64Ubuntu14.04
CMake 2.8.12.2 
 
0015497: Eclipse CDT4 Generator incorrectly process CMAKE_MAKE_PROGRAM with arguments
Eclipse requires separate build command and build arguments settings.
CMakeLists.txt:

set(CMAKE_MAKE_COMMAND "${CMAKE_MAKE_PROGRAM} -j8")

Generated files - INCORRECT

.project:

                <dictionary>
                    <key>org.eclipse.cdt.make.core.build.command</key>
                    <value>/usr/bin/make -j8</value>
                </dictionary>

.cproject:

            <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
                <buildTargets>
                    <target name=": rebuild_cache" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>rebuild_cache</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[exe] vpercnode" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>vpercnode</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[exe] vpercnode/fast" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>vpercnode/fast</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="Build" path="[Targets]/[exe] vpercnode" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments>-C "/home/ceefour/git/vpercnode" </buildArguments>
                        <buildTarget>vpercnode</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="Clean" path="[Targets]/[exe] vpercnode" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/cmake</buildCommand>
                        <buildArguments>-E chdir "/home/ceefour/git/vpercnode" "/usr/bin/cmake" -P "CMakeFiles/vpercnode.dir/cmake_clean.cmake"</buildArguments>
                        <buildTarget/>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name=": all" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>all</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name=": clean" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>clean</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[obj] src/vpercnode.cpp.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>src/vpercnode.cpp.o</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[pre] src/vpercnode.cpp.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>src/vpercnode.cpp.i</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[to asm] src/vpercnode.cpp.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make -j8</buildCommand>
                        <buildArguments/>
                        <buildTarget>src/vpercnode.cpp.s</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                </buildTargets>
            </storageModule>
        </cconfiguration>
    </storageModule>
    <storageModule moduleId="cdtBuildSystem" version="4.0.0">
        <project id="vpercnode.null.1" name="vpercnode"/>
    </storageModule>
    <storageModule moduleId="scannerConfiguration">
        <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
        <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
            <buildOutputProvider>
                <openAction enabled="true" filePath=""/>
                <parser enabled="true"/>
            </buildOutputProvider>
            <scannerInfoProvider id="specsFile">
                <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="/usr/bin/cc" useDefault="true"/>
                <parser enabled="true"/>
            </scannerInfoProvider>
        </profile>
        <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
            <buildOutputProvider>
                <openAction enabled="true" filePath=""/>
                <parser enabled="true"/>
            </buildOutputProvider>
            <scannerInfoProvider id="makefileGenerator">
                <runAction arguments="-f ${project_name}_scd.mk" command="/usr/bin/make -j8" useDefault="true"/>
                <parser enabled="true"/>
            </scannerInfoProvider>
        </profile>
    </storageModule>

Generated files - CORRECT:

.project

                <dictionary>
                    <key>org.eclipse.cdt.make.core.build.arguments</key>
                    <value>-j8</value>
                </dictionary>
                <dictionary>
                    <key>org.eclipse.cdt.make.core.build.command</key>
                    <value>/usr/bin/make</value>
                </dictionary>

.cproject :

            <storageModule moduleId="org.eclipse.cdt.make.core.buildtargets">
                <buildTargets>
                    <target name=": rebuild_cache" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>rebuild_cache</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[exe] vpercnode" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>vpercnode</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[exe] vpercnode/fast" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>vpercnode/fast</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="Build" path="[Targets]/[exe] vpercnode" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8 -C "/home/ceefour/git/vpercnode" </buildArguments>
                        <buildTarget>vpercnode</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="Clean" path="[Targets]/[exe] vpercnode" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/cmake</buildCommand>
                        <buildArguments>-E chdir "/home/ceefour/git/vpercnode" "/usr/bin/cmake" -P "CMakeFiles/vpercnode.dir/cmake_clean.cmake"</buildArguments>
                        <buildTarget/>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name=": all" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>all</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name=": clean" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>clean</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[obj] src/vpercnode.cpp.o" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>src/vpercnode.cpp.o</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[pre] src/vpercnode.cpp.i" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>src/vpercnode.cpp.i</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                    <target name="[to asm] src/vpercnode.cpp.s" path="" targetID="org.eclipse.cdt.make.MakeTargetBuilder">
                        <buildCommand>/usr/bin/make</buildCommand>
                        <buildArguments>-j8</buildArguments>
                        <buildTarget>src/vpercnode.cpp.s</buildTarget>
                        <stopOnError>true</stopOnError>
                        <useDefaultCommand>false</useDefaultCommand>
                    </target>
                </buildTargets>
            </storageModule>
        </cconfiguration>
    </storageModule>
    <storageModule moduleId="cdtBuildSystem" version="4.0.0">
        <project id="vpercnode.null.1" name="vpercnode"/>
    </storageModule>
    <storageModule moduleId="scannerConfiguration">
        <autodiscovery enabled="true" problemReportingEnabled="true" selectedProfileId="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile"/>
        <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerProjectProfile">
            <buildOutputProvider>
                <openAction enabled="true" filePath=""/>
                <parser enabled="true"/>
            </buildOutputProvider>
            <scannerInfoProvider id="specsFile">
                <runAction arguments="-E -P -v -dD ${plugin_state_location}/${specs_file}" command="/usr/bin/cc" useDefault="true"/>
                <parser enabled="true"/>
            </scannerInfoProvider>
        </profile>
        <profile id="org.eclipse.cdt.make.core.GCCStandardMakePerFileProfile">
            <buildOutputProvider>
                <openAction enabled="true" filePath=""/>
                <parser enabled="true"/>
            </buildOutputProvider>
            <scannerInfoProvider id="makefileGenerator">
                <runAction arguments="-j8 -f ${project_name}_scd.mk" command="/usr/bin/make" useDefault="true"/>
                <parser enabled="true"/>
            </scannerInfoProvider>
        </profile>
    </storageModule>
In summary:

1. It has to split the actual make command and the arguments
2. In Eclipse project files, the make command and arguments are separate settings. In cases where there's already an argument, it should be prefixed (with additional space) from the other arguments.

Also on StackOverflow: http://stackoverflow.com/questions/10688549/cmake-and-parallel-build#comment47092785_10688549 [^]
No tags attached.
Issue History
2015-04-06 00:05Hendy IrawanNew Issue
2015-04-06 06:34Felix SchwitzerNote Added: 0038405
2015-04-06 08:36Brad KingNote Added: 0038408
2015-04-06 08:37Brad KingStatusnew => resolved
2015-04-06 08:37Brad KingResolutionopen => no change required
2015-11-02 09:13Robert MaynardNote Added: 0039760
2015-11-02 09:13Robert MaynardStatusresolved => closed

Notes
(0038405)
Felix Schwitzer   
2015-04-06 06:34   
For eclipse project there is a cmake-variable CMAKE_ECLIPSE_MAKE_ARGUMENTS that
exactly sets <buildArguments>-jN</buildArguments> in .cproject
(0038408)
Brad King   
2015-04-06 08:36   
Re 0015497:0038405: Indeed, CMAKE_MAKE_PROGRAM is supposed to be the path to the tool only, not a command line.
(0039760)
Robert Maynard   
2015-11-02 09:13   
Closing resolved issues that have not been updated in more than 4 months.