Custom built files

One really annoying thing about DevStudio is that it doesn't let you add a new file type with special build settings, and have those settings apply to every file of that type that you add. (Well, there is always the "Hack the Registry!!!" solution...) These are just a couple of macros I slapped together to make that (a little) easier. I designed these originally to add assembly files to your project, using NASM (a cool little freeware assembler [that creates Win32 objs!] available here) but they can be very easily hacked to work with any file type and build command line imaginable. (A little more hacking would be required for a multi-line build command.) The first macro adds a new assembly file, the second one adds an assembly file you've already written. Just change your path to the executable file in the "NASMPath" variable, and the command line in "NASMSwitches". It'll ask you for the filename in both cases; the first one creates a file with that name, the second will just add that file to your project. Unfortunately, no file dialog is available, or else you could just browse to it. Instead, you need to enter the full path to the ASM file. I haven't tested it with only a filename, so I'm not sure what directory DevStudio will use by default. The first macro even increments the filename each time you create a new one, and adds the file to the project's current directory.


Option Explicit
'
' This is the path to nasmw.exe
'
Public Const NASMPath = "C:\nasm\nasmw.exe"
Public Const NASMSwitches = " -f win32 ""$(InputPath)"" -o ""$(ProjDir)\$(IntDir)\" + _
	"$(InputName).obj"""
'
' The total number of ASM files created so far
'
Private ASMFilesCreated
ASMFilesCreated = 1

Sub AddNewAssemblyFile()
'Description: Add a new Assembly File to your project
	Dim TempConfiguration
	Dim TempDocument
	Dim TempFilename
	Dim TempBackSlashPosition
	Dim CurrentProject
	Dim FileSystem

	Set CurrentProject = Application.ActiveProject
	TempFilename = "Asm" + CStr(ASMFilesCreated) + ".asm"

	If CurrentProject.Type <> "Build" Then
		MsgBox "This project is not a build project."

	Else

		ASMFilesCreated = ASMFilesCreated + 1

		TempFilename = InputBox("Enter the filename:", "Add ASM File", _
			TempFilename)

		If TempFileName = "" Then Exit Sub

		TempBackSlashPosition = InStrRev(CurrentProject.FullName, "\")

		TempFilename = Left(CurrentProject.FullName, TempBackSlashPosition) + TempFilename
		
		Application.Documents.Add "Text"
		Application.ActiveDocument.Save(TempFilename)

		CurrentProject.AddFile TempFileName

		For Each TempConfiguration In CurrentProject.Configurations
			TempConfiguration.AddCustomBuildStepToFile TempFilename, NASMPath + _
				NASMSwitches, "$(ProjDir)\$(IntDir)\$(InputName).obj", _
				"Assembling $(InputName).asm..."
		Next

	End If
			
End Sub

Sub AddExistingAssemblyFile()
'Description: Add an existing Assembly File to your project
	Dim TempConfiguration
	Dim TempDocument
	Dim TempFilename
	Dim TempBackSlashPosition
	Dim CurrentProject
	Dim FileSystem

	Set CurrentProject = Application.ActiveProject
	TempFilename = "Asm" + CStr(ASMFilesCreated) + ".asm"

	If CurrentProject.Type <> "Build" Then
		MsgBox "This project is not a build project."

	Else

		ASMFilesCreated = ASMFilesCreated + 1

		TempFilename = InputBox("Enter the filename:", "Add ASM File", TempFilename)

		If TempFileName = "" Then Exit Sub

		CurrentProject.AddFile TempFileName

		For Each TempConfiguration In CurrentProject.Configurations
			TempConfiguration.AddCustomBuildStepToFile TempFilename, NASMPath + _
				NASMSwitches, "Assembling $(InputName).asm..."
		Next

	End If
			
End Sub


Comments

  • All very well, but how would you set the dependencies??

    Posted by Legacy on 03/30/1999 12:00am

    Originally posted by: Ken Duffill

    If you add a file with a custom build step, the Dev_Studio seems incapable of determining the dependencies. Even if the file is a .c or .cpp and the include files are #include .h files. The very act of setting the custom build step seems to divorce the file from its dependencies.

    I can't find a way of setting the dependencies using macros or add-ins. Anyone got any ideas???

    Reply
Leave a Comment
  • Your email address will not be published. All fields are required.

Top White Papers and Webcasts

  • Today's agile organizations pose operations teams with a tremendous challenge: to deploy new releases to production immediately after development and testing is completed. To ensure that applications are deployed successfully, an automatic and transparent process is required. We refer to this process as Zero Touch Deployment™. This white paper reviews two approaches to Zero Touch Deployment--a script-based solution and a release automation platform. The article discusses how each can solve the key …

  • Learn How A Global Entertainment Company Saw a 448% ROI Every business today uses software to manage systems, deliver products, and empower employees to do their jobs. But software inevitably breaks, and when it does, businesses lose money -- in the form of dissatisfied customers, missed SLAs or lost productivity. PagerDuty, an operations performance platform, solves this problem by helping operations engineers and developers more effectively manage and resolve incidents across a company's global operations. …

Most Popular Programming Stories

More for Developers

RSS Feeds