[cmake-developers] [CMake 0015497]: Eclipse CDT4 Generator incorrectly process CMAKE_MAKE_PROGRAM with arguments

Mantis Bug Tracker mantis at public.kitware.com
Mon Apr 6 00:05:40 EDT 2015


The following issue has been SUBMITTED. 
====================================================================== 
http://www.cmake.org/Bug/view.php?id=15497 
====================================================================== 
Reported By:                Hendy Irawan
Assigned To:                
====================================================================== 
Project:                    CMake
Issue ID:                   15497
Category:                   CMake
Reproducibility:            always
Severity:                   minor
Priority:                   normal
Status:                     new
====================================================================== 
Date Submitted:             2015-04-06 00:05 EDT
Last Modified:              2015-04-06 00:05 EDT
====================================================================== 
Summary:                    Eclipse CDT4 Generator incorrectly process
CMAKE_MAKE_PROGRAM with arguments
Description: 
Eclipse requires separate build command and build arguments settings.

Steps to Reproduce: 
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>


Additional Information: 
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
====================================================================== 

Issue History 
Date Modified    Username       Field                    Change               
====================================================================== 
2015-04-06 00:05 Hendy Irawan   New Issue                                    
======================================================================



More information about the cmake-developers mailing list