I am developing C/C++ with Visual Studio Code using cmake and so CMake Tools extension of Visual Studio Code.
When I run cmake command manually (from build dir, just doing cmake ..), cmake configuration works but when I use CMake Tools, it fails.
I have looked at traces and the failure of CMake Tools is because of this difference:
Manually:
set(CMAKE_C_COMPILER_ARG1 -march=armv7-a -marm -mthumb-interwork -mfloat-abi=hard -mfpu=neon -mtune=cortex-a7 --sysroot=/opt/mydev/1.1.2/sysroots/cortexa7hf-vfp-neon-mydev-linux-gnueabi CACHE STRING Arguments to C compiler )
CMake Tools:
set(CMAKE_C_COMPILER_ARG1 /opt/mydev/1.1.2/sysroots/i686-mydevsdk-linux/usr/bin/arm-mydev-linux-gnueabi/arm-mydev-linux-gnueabi-gcc )
If I explicitly give this argument to CMake Tools, okay, it would work, but, why do I have to do that?
Why cmake just works (getting CMAKE_C_COMPILER_ARG1 from exported CC environment variable) but CMake Tools does not? If it would just execute cmake, it would work, but apparently it does not do that.
So, what is the thing that makes CMake Tools set CMAKE_C_COMPILER_ARG1 wrongly?
Is there anyway to make CMake Tools just work as cmake?
Related
I am trying to create a simple helloworld Eclipse CDT project using the CMake GUI. The CMake file looks like this:
cmake_minimum_required(VERSION "3.11.1")
project("HelloWorld")
add_executable("HelloWorldMain" "Main.cpp")
install(TARGETS "${PROJECT_NAME}" DESTINATION bin)
install(FILES "Main.cpp" DESTINATION src)
The only c/c++ compiler I have is MSVC so I set that as the CMAKE_CXX_COMPILER but I get an error when configuring as shown here:
I know this file exists, but how do I get it to find it?
I ended up not using the GUI. Instead I used the VS x64 Native Tools Command Prompt then ran the cmake command:
cmake -G "Eclipse CDT4 - NMake Makefiles" -DCMAKE_BUILD_TYPE=Debug -DCMAKE_ECLIPSE_GENERATE_SOURCE_PROJECT=TRUE -DCMAKE_ECLIPSE_MAKE_ARGUMENTS=-j8 ../
I get the following when trying to build a makefile in eclipse neon:
Error: Program "make" not found in PATH
followed by my full path, which begins
Error: Program "make" not found in PATH PATH=[C:/Program
Files/Java/jre1.8.0_141/bin/server;C:/Program
Files/Java/jre1.8.0_141/bin;C:/Program
Files/Java/jre1.8.0_141/lib/amd64;C:\msys64\mingw64\bin;
(it continues after this...)
However, cmake is definitely present in C:\msys64\mingw64\bin.
How can I fix this so eclipse is using the cmake.exe?
Eclipse is looking for make program not cmake. To install make on MSYS2 use the command pacman -S make. CMake is a build system generator that creates Makefiles for you. But it does not build the Makefiles itself it uses an installed make for that.
I´m trying to run CMake from a Windows machine to generate an Android NDK project with a specific toolchain file. There is a tutorial on how to generate Android projects with CMake by google. Anyway I need the project to be an Eclipse project because its the only way to import it into ADT bundle. Now on the CMake UI there are more option for that:
Eclipse CDT4 - MinGW
Eclipse CDT4 - NMake
Eclipse CDT4 - Unix
Eclipse CDT4 - Ninja
The 2nd one (Eclipse CDT - NMake) is the right choice for this configuration, when i start CMake then it fail generating throwing following error:
CMake Warning at CMakeLists.txt:3 (project):
To use the NMake generator, cmake must be run from a shell that can use the
compiler cl from the command line. This environment does not contain
INCLUDE, LIB, or LIBPATH, and these must be set for the cl compiler to
work.
any ideas?
You need to initialize the environment with vcsvarsall.bat(shipped with Visual Studio).
E.g. for Microsoft Visual Studio 2010 - run this "C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat" in the same console instance where you intend to execute your cmake command:
...>"C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"
Setting environment for using Microsoft Visual Studio 2010 x86 tools.
Or find in Start Menu "Visual Studio Command Prompt (2010)" ("Developer Command Prompt for VS20XX" for recent versions of VS) which does this initialization for you and run cmake there.
I installed eclipse and then cdt on an ubuntu system recently and was trying to make the first runnable c/c++ proj..
I installed g++ also, and then created the first executable cpp 'Hello World' project
some files are created... then some issues...
even though Build Automatically is selected, I have to goto the
project n do a Build Project to build it manually, and this i have
to do every time I make a change
After Building manually, there are some new folders created with Binaries and Debug files and I can see g++ commands in the console being executed. The project binary is output both to debug n binaries folder. But i am not able to run these through the Green Play Button or any other way in eclipse. Even Run configuration is not showing any option for C/C++ project..
Though I can goto terminal and run the binary myself through ./
But I want to be able to run n debug this through eclipse.
please help in fixing me this problem as I really love eclipse n have some c/cpp assignments coming soon..
Console info on doing a manual project build -
Build of configuration Debug for project qwe **
make all
Building file: ../src/qwe.cpp
Invoking: GCC C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/qwe.d" -MT"src/qwe.d" -o "src/qwe.o" "../src/qwe.cpp"
Finished building: ../src/qwe.cpp
Building target: qwe
Invoking: GCC C++ Linker
g++ -o "qwe" ./src/qwe.o
Finished building target: qwe
Build Finished **
I had an identical problem and solved it by installing two additional "C/C++ Development Tools" that didn't show up when I originally filtered for "cdt" in Eclipse software update. Filter for C++ instead and you'll spot them, after install and reboot everything works.
I've had Eclipse for Java on my computer for a few years, and decided to install the CDT and learn C. I installed both MinGW and Cygwin and the CDT detects and tries to use them when I make a new project.
I choose File > New C++ Project and choose Hello World C++ Project and the CygwinGCC toolchain. I name the project "asdf" and hit "Build Debug" in the toolbar. The compiler completes without error. I hit Run and nothing happens.
Browsing to the project directory manually and running asdf.exe gives me an error saying:
"The program can't start because cygwin1.dll is missing from your computer. Try reinstalling the program to fix this problem."
The same thing happens using MinGW, only a different dll is missing.
What do I need to do to have a usable .exe?
(I'm running Windows 7 x64 and the newest version of Eclipse and the CDT.)
EDIT:
The compiler output is as follows:
**** Build of configuration Debug for project asdf ****
make all
Building file: ../src/asdf.cpp
Invoking: Cygwin C++ Compiler
g++ -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/asdf.d" -MT"src/asdf.d" -o"src/asdf.o" "../src/asdf.cpp"
cygwin warning:
MS-DOS style path detected: C:\Users\Shawn\Dropbox\eclipse\asdf\Debug
Preferred POSIX equivalent is: /cygdrive/c/Users/Shawn/Dropbox/eclipse/asdf/Debug
CYGWIN environment variable option "nodosfilewarning" turns off this warning.
Consult the user's guide for more details about POSIX paths:
http://cygwin.com/cygwin-ug-net/using.html#using-pathnames
Finished building: ../src/asdf.cpp
Building target: asdf.exe
Invoking: Cygwin C++ Linker
g++ -o"asdf.exe" ./src/asdf.o
Finished building target: asdf.exe
This error message means that Windows isn't able to find "cygwin1.dll". The Programs that the Cygwin gcc create depend on this DLL. The file is part of cygwin , so most likely it's located in C:\cygwin\bin. To fix the problem all you have to do is add C:\cygwin\bin (or the location where cygwin1.dll can be found) to your system path. Alternatively you can copy cygwin1.dll into your Windows directory.
There is a nice tool called DependencyWalker that you can download from http://www.dependencywalker.com . You can use it to check dependencies of executables, so if you inspect your generated program it tells you which dependencies are missing and which are resolved.
You can compile with either Cygwin's g++ or MinGW (via stand-alone or using Cygwin package). However, in order to run it, you need to add the Cygwin1.dll (and others) PATH to the system Windows PATH, before any cygwin style paths.
Thus add: ;C:\cygwin64\bin to the end of your Windows system PATH variable.
Also, to compile for use in CMD or PowerShell, you may need to use:
x86_64-w64-mingw32-g++.exe -static -std=c++11 prog_name.cc -o prog_name.exe
(This invokes the cross-compiler, if installed.)
To add to this and save someone another google, just do this in cmd:
set PATH=%PATH%;C:\cygwin64\bin