visual studio compiler how to specify the include path to build cpp - c++

I am using a batch file to try to build my cpp program using Visual Studio's cl.exe.
This is what it contains:
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe" /I "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\" "%1" /Fe "%1.exe"
I want to the compiler to include iostream from the include folder and build my .cpp (%1) as %1.exe.
Instead, I get:
Microsoft (R) C/C++ Optimizing Compiler Version 17.00.60610.1 for x86
Copyright (C) Microsoft Corporation. All rights reserved.
cl : Command line error D8003 : missing source filename
What am I doing wrong?
Win8.1 x64

Answer:
Get rid of the backslash at the end of the include path (...\...\include")
Do not surround %1 with quotes
no space between /Fe and ":
"C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\cl.exe" /I "C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include" %1 /Fe"%1.exe"

Do not run cl.exe from a standard command prompt. Use the "Developer Command Prompt" installed with VS 2015. This sets several environment variables for you, specific to your installation.
To read more:
https://msdn.microsoft.com/en-us/library/f35ctcxw.aspx

Related

Visual Studio 2015 doesn't have cl.exe

I downloaded Visual C++ and Visual Studio, but I cannot find cl.exe to compile my C++ file. The path to the install is `C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin.
Where can I find the compiler to compile C++ code?
Visual Studio 2015 doesn't install C++ by default. You have to rerun the setup, select Modify and then check Programming Language -> C++
In Visual Studio 2019 you can find cl.exe inside
32-BIT : C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx86\x86
64-BIT : C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.20.27508\bin\Hostx64\x64
Before trying to compile either run vcvars32 for 32-Bit compilation or vcvars64 for 64-Bit.
32-BIT : "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars32.bat"
64-BIT : "C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvars64.bat"
If you can't find the file or the directory, try going to C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC and see if you can find a folder with a version number. If you can't, then you probably haven't installed C++ through the Visual Studio Installation yet.
For me that have Visual Studio 2015 this works:
Search this in the start menu: Developer Command Prompt for VS2015 and run the program in the search result.
You can now execute your command in it, for example: cl /?
For first need check is installed cl.exe,
open Developer Command Prompt for VS2015 and type "where cl"
When its founded on the PC need add $(VC_LibraryPath_x64), $(WindowsSDK_LibraryPath_x64) and $(NETFXKitsDir)Lib\um\x64 to Project->Properties->VC++ Directories

VC++ Standard Library Link Error

I'm having trouble with the VC++ compiler. I've installed the windows sdk with compilers, libraries and headers, and tried to compile a test program like so:
#include <cstdio>
int main(int argc, char* argv[]) {
printf("%s", "Hello world!");
return 0;
}
This is the command line script i'm using to compile:
#echo off
set clpath=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
set clname=cl.exe
set linkpath=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64
set linkname=link.exe
set libpath=/libpath:"C:\Program Files\Microsoft SDKs\Windows\v7.1\Lib" /libpath:"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib"
set includepath=/I "C:\Program Files\Microsoft SDKs\Windows\v7.1\Include" /I "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include"
set subsystem=console
set entry=main
set libfiles=
set cfiles=hello.cpp
set objfiles=hello.obj
set path=%clpath%
%clname% %includepath% /c %cfiles%
set path=%linkpath%
%linkname% %libpath% /subsystem:%subsystem% /entry:%entry% %libfiles% %objfiles%
And here's the output:
Microsoft (R) C/C++ Optimizing Compiler Version 16.00.30319.01 for x64
Copyright (C) Microsoft Corporation. All rights reserved.
hello.cpp
Microsoft (R) Incremental Linker Version 10.00.30319.01
Copyright (C) Microsoft Corporation. All rights reserved.
hello.obj : error LNK2019: unresolved external symbol printf referenced in function main
hello.exe : fatal error LNK1120: 1 unresolved externals
The program links fine as long as i'm not trying to reference any standard library functions. I've tried messing around with the NODEFAULTLIB and DEFAULTLIB switches as well as specifying the standard libs to link to directly, to no avail.
Your library paths are wrong. This folder:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib
contains the x86 libraries. You're targeting amd64, so you need the amd64 libraries, from:
C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64
(You'll also need the correct amd64 library path for the Windows SDK; I don't have v7.1 installed, so I don't know exactly what that is.)
Note that you can configure your environment with all of the correct paths and environment variables simply by running:
"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" amd64
On a related note, setting /entry:main is wrong: the entry point needs to be the CRT initialization entry point. If you define a main function, then this is mainCRTStartup. The linker will pick this function as the entry point by default, so you do not need to specify an entry point using /entry.
Try adding libcmt.lib to libfiles=
Click here for more info on linking against C-libs on Windows.
BTW. The major advantage of running VC++ is a good IDE. Why do you need to build it from command-line?

MSVC can't find its libs

For some purpose that is not really important I used MSVC 2012 in console mode (Windows 8x64) and when I tried to compile "Hello, World!" it didn't find its stabdard library and linker couldn't find some of its lib-files. So in the end I managed to configure both compile and link commands to make them work properly:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\cl.exe" -c main.cpp /I
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include"
and for link:
"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\link.exe"
main.obj
/LIBPATH:"C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\lib"
/LIBPATH:"C:\Program Files (x86)\Windows Kits\8.1\Lib\winv6.3\um\x86"
To sum up I want to know, how can they be configured so that cl found its headers and link found those libs. Please consider that I'm going to use them in Qt Creator, where they don't work and I've just found a way of getting them to work but from outside of Creator and I need to do it by Creators' means (nmake or jom options that is).
You need to call
call %ProgramFiles(x86)%\Microsoft Visual Studio 12.0\VC\vcvarsall.bat
in your command line window. This sets up a usable environment.

C++ command line compiler for Visual Studio 2012

I have installed Visual Studio Express 2012 and I have added cl.exe to my PATH but apparently is missing a dll ( ? ), the mspdb110.dll, I have also noticed that there are 2 cl.exe in 2 different paths:
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin
C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\bin\x86_amd64
how i can compile a file main.cpp from the command line with the VS compiler ?
Where I can find a reference for this compiler ?
Thanks.
Run the vcvarsall.bat batch file from the VC directory under whatever directory you installed Visual Studio to (e.g., on my PC, it's in C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC). This batch file will configure the environment for toolchain use.
By default, it will configure the environment for use of the x86 native toolchain. You can also provide an argument to the batch file to use a different toolchain. For example, you can pass amd64 to use the native x64 toolchain, or x86_amd64 to use the x86 -> x64 cross compilation toolchain. Take a look at the contents of the batch file if you are interested in other options or what, exactly, it configures.

Error "fatal error C1034: windows.h: no include path set"

OS Windows Vista Ultimate
I am trying to run a program called minimal.c. When I type at the command line:
C:\Users\nathan\Desktop>cl minimal.c
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 14.00.50727.762 for 80x86
Copyright (C) Microsoft Corporation. All rights reserved.
minimal.c
minimal.c(5) : fatal error C1034: windows.h: no include path set
I have set all the paths:
C:\Users\nathan\Desktop>path
PATH=C:\Program Files (x86)\Microsoft Visual Studio 8\VC\bin;C:\Windows\system3
;C:\Windows;C:\Windows\System32\Wbem;C:\Program Files (x86)\ATI Technologies\AT
.ACE\Core-Static;C:\Program Files\Intel\DMIX;c:\Program Files (x86)\Microsoft S
L Server\100\Tools\Binn\;c:\Program Files (x86)\Microsoft SQL Server\100\DTS\Bi
n\;C:\Program Files (x86)\QuickTime\QTSystem\;C:\Program Files (x86)\Java\jdk1.
.0_13\bin;C:\Program Files (x86)\Autodesk\Backburner\;C:\Program Files (x86)\Co
mon Files\Autodesk Shared\;C:\Program Files (x86)\Microsoft DirectX SDK (March
009)\Include;C:\Users\nathan\Desktop\glut-3.7.6-bin\glut-3.7.6-bin;C:\Program F
les (x86)\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files (x86)\Microsof
Visual Studio 8\VC\PlatformSDK\Include;C:\Program Files (x86)\Microsoft Visual
Studio 8\VC\PlatformSDK\Include\gl
I have gone and made sure windows.h is in the directory. I'm setting the path too. It's
in C:\Program Files (x86)\Microsoft Visual Studio 8\VC\PlatformSDK\Include.
I have Visual Studio 2005.
I have exhausted all possibilities. Any ideas?
You could also run the vcvars32.bat file from the directory C:\Program Files\Microsoft Visual Studio 8\VC\bin (this is in your path) prior to your cl command.
Like this:
C:\Users\nathan\Desktop>vcvars32
C:\Users\nathan\Desktop>cl minimal.c
vcvars32 calls C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\vsvars32.bat which sets up the required environment for compiling and linking.
The environment variables are INCLUDE, LIB, and PATH.
The compiler looks for header files in the INCLUDE path during compile, and libraries are fetched from the LIB path during link.
For me, with Visual Studio 2017,
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\vsdevcmd.bat"
is the command to use before compiling with cl.
Here is the documentation.
When you started the command line, did you run the included command line shortcut that comes with the Visual Studio setup? This will set the correct environment variables for you so that the compilation will work correctly.
In your project folder, open a PowerShell window and run:
cmd /c 'call "C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvars64.bat" && cl minimal.c '
You've added your INCLUDE paths to your PATH environment variable. Use vcvars32.bat as the others have suggested.
Your path variable might be too long. Windows can’t take more than 1023 characters in the PATH environment variable.
I had the same issue getting the
fatal error C1034: stdio.h: no include path set
and after running the C:\Program Files\Microsoft Visual Studio\2022\Community\VC\Auxiliary\Build>vcvars64.bat cmd/batch script would get the
fatal error C1083: Cannot open include file: 'stdio.h': No such file or directory
error message. From here, and other posts on that page, I suspected that the Windows 10 SDK package must be installed. After installation and running the vcvars64.bat script from the path mentioned above, the problem was solved.
P.S. As explained here, an alternative to manually finding and running the above cmd/batch script, you may just do +Q and search for Developer Command Prompt for ..., in my case it is Developer Command Prompt for VS 2022.
if you have version 2017 of the compiler cl.exe (you installed Visual Studio 2017), in the command prompt you need go to "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\VC\Auxiliary\Build" and run 'vcvars32.bat' for x86 compilation or vcvars64.bat for x64 compilation.