Mike Trader
Mike Trader

Reputation: 8704

Specify the name of compiled binary (*.exe) within source code in Visual Studio 2008

From this thread

http://www.codeguru.com/forum/showthread.php?p=1863547

It seems this cannot be done with:

#pragma comment(linker, "/out:mycool.exe")

Is there some simple way this can be done without having to use project settings, make files etc?

Added:

Why do I want to do this. Well this gets into another subject which is probably my next question - working with the IDE. I have to provide many examples in one project. They are simple single files that demonstrate different ways of doing things and each one should really be a different executable EXample1.exe, Example2.exe.

I only want to paste the source code or hand someone a SINGLE file with everything needed to make the example executable (on a web forum for example. I do not want to attach a 3.6MB project folder just to get a different executable name!

Upvotes: 0

Views: 3716

Answers (3)

Mike Trader
Mike Trader

Reputation: 8704

To use the linker pragma comment, the output file must NOT be specified in the linker section of the project properties:

project -> properties -> Linker -> General -> Output File

Delete the entry: $(OutDir)\$(ProjectName).exe

then the prama statement will work:

pragma comment(linker, "/out:mycool.exe")

Thanks to JC for the walkthrough

Specifying a complete path is not possible

http://social.msdn.microsoft.com/forums/en-US/vcgeneral/thread/11a06ecd-dcca-4d81-8626-ba0c5a1835c1/

but the work around is:

What I do is have a header file loacated somewhere near the library file, this header will include the pragma line.

pragma comment(lib, FILE "../libs/mylibary.lib")

if FILE is "C:\Project\SharedLibs\Xvid\latest.h" then the pragma will include "C:\Project\SharedLibs\Xvid\libs/mylibary.lib" once it has normalized the uri to remove the ..'s

this will always cause the pragma to include the library with an absolute path created from the path of the accompanying header.

I use this system to include a single header in a project and regardless of the relative paths between the lib and project the lib will always be included cleanly.

Added:

The full path can be specified as long as it is 8.3 format. This can present problems for a path like:

C:\Program Files\Abyss Web Server\htdocs\

Program files is commonly Progra~1 but a folder name with a space is more tricky. In this case it becomes AbyssW~1 The \ must be escaped resulting in \ producing a working pragma of:

#pragma comment(linker, "/out:C:\\Progra~1\\AbyssW~1\\htdocs\\MyApp.exe") 

as kibibu showed:

#pragma comment(linker, "/out:\"C:\\Program Files\\Abyss Web Server\\htdocs\\MyApp.exe\"") 

also works

Upvotes: 1

Tom
Tom

Reputation: 10819

If you don't want to stray too far from a stock Visual C++ installation, you should consider using NMake. It can integrate with the IDE using project files, but it can also simply be run from the command-line very easily. It's also far more lightweight than project files for generating an arbitrary number of simple and similar executables.

Upvotes: 0

GManNickG
GManNickG

Reputation: 503855

Compiling transcends source code. Source code only exists, and something has to take it and make something of it. Anything you do in source code is really just going to be a directive to the compiler. You might as well use project settings. This stuff isn't standard, because the standard only covers behavior and definitions of source code, not compilers.

g++ takes the output file as a parameter: g++ -o myexe.exe main.cpp. What should it do if it comes across a "output should be this!" directive in the source code?

Same with cl (Visual Studio), it passes the output setting into the command line.

Not to say it's impossible, but I doubt it's worth it to try and come up with a way to do it, let alone make it standard.

Upvotes: 4

Related Questions