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

  • Live Event Date: May 6, 2014 @ 1:00 p.m. ET / 10:00 a.m. PT While you likely have very good reasons for remaining on WinXP after end of support -- an estimated 20-30% of worldwide devices still are -- the bottom line is your security risk is now significant. In the absence of security patches, attackers will certainly turn their attention to this new opportunity. Join Lumension Vice President Paul Zimski in this one-hour webcast to discuss risk and, more importantly, 5 pragmatic risk mitigation techniques …

  • It's time high-level executives and IT compliance officers recognize and acknowledge the danger of malicious insiders, an increased attack surface and the potential for breaches caused by employee error or negligence. See why there is extra emphasis on insider threats.

Most Popular Programming Stories

More for Developers

Latest Developer Headlines

RSS Feeds