I am on university currently and in this semester almost all subjects are related to C++, the problem is that all the resource I am getting are VS projects and solutions and the version of Microsoft Visual Studio for Mac OS does not support C++. To make things even worse we are using couple of different libraries but If I could somehow solve the problem of opening and editing project files I think that importing the libs would be small problem. So, is there any way that I can open and work with that projects and solutions beside Parallels cause I don't have money for that.
If the number of source files is small you can create a new XCode project and add them to that project manually. If there are a lot of source files maybe some of the tools discussed here can help to automate at least some parts of the conversion.
You can also try one of the VSCode extensions that can open sln files, like this one and then setup a clang workflow.
If the code uses Windows specific APIs or libraries this won't be enough and you will have to somehow get a Windows machine.
Related
I'm fairly new to C/C++ but have never tried to include external libraries before in my projects as I've mostly been doing tutorials and such. These have been mostly console applications/games. When I was looking for an alternative to the "evil" system(" ") commands I was pointed to Curses.
Now I've gone to the GitHub for both branches of the PDCurses source library (wmcbrine's branch and Bill-Gray's Branch) but every time I try to build library it returns multiple errors (happy to provide a image of the errors if need be).
The biggest issue is that the documentation is a little difficult to understand for an absolute beginner and most tutorials are extremely outdated. I was hoping that someone know's of a relevant tutorial on how to get PDCurses up and running on windows (for C++) or could explain how to do it on here.
So, I have figured out how to get PDCurses compiled using it's Makefiles (Makefile.vc specifically) and such.
To anyone who may have issue doing this in future, make sure to read the README.md file very slowly and carefully. From a beginners perspective it was a bit vague but it does contain all the information needed it in it, it should just be read a few time 😅.
It also should be noted that when compiling the library into a .dll for Visual Studio 2019 using the nmake function, you have to run the command in the x86/x64 Native Tools Command Prompt. Which one you use will depend on the architecture you plan to build your project in. If your not sure where to find it, open you start menu>all apps>scroll down to the folder "Visual Studio 2019" and they all should be in there.
Run the "nmake" command in this shell configures a .bat file which optimises for x86 or x64 architecture respectively. Hopefully this helps anyone who might ask this (or a similar) question.
I'm writing a C++ static library using Visual Studio 2008. My static library needs to be loaded by different executables for Windows and Linux (Red Hat)
Now, for the windows build I've got no problems since I'm developing using its environment (as I've already said VS 2008 on Win 8).
My problems occurs when I move the code on Linux.
Sincerely I don't know what is the better solution.
So I'm here asking a few questions looking for the right choice:
Should I compile my executable on Windows using some tools to make a build for linux? Is this even possible? What tool? I tried Cmake but I hadn't found a way.
Should I compile my lib on windows, transfer it on my Linux system and compile in Linux an executable that loads my static library?
Is there a tool that merely converts my vcproj into a makefile? So in windows I only generate the makefile, send it to the Linux System and there compile everything?
The real problem is that I'm not that confident with makefiles, the project is really huge and create my own makefile from scratch is my last possible option and I'd like to avoid it since there's a lot of work to do and it could be time consumming
Thank in advance!
At the end of my journey searching for the right choice I've found the solution that best suits my needs.
What I've done was using Make It So that created makefiles for each project inside my solution, then transferred makefile together with source code, after a little customisation of the makefiles to suit my needs I compiled smoothly my code.
Thanks to those who commented, you helped me in my researches!
Cheers!
I'm having several headaches trying to work in Eclipse for C++ development.
The IDE persistently shows Errors and Warnings in the Problems pane, even after they have been solved - only a right-click->"Delete" seems to clear them. Even then, a few will pop back up after a compile, which is probably related to the second issue...
My codebase is rather small (two projects, one for unit tests, one for a small library I'm developing), though I do make use of basic C++ templating. However, Eclipse largely fails to code complete for included libraries, files in my own workspace but separate projects, and even occasionally files within the same project.
I've tried rebuilding the index on my projects and fiddled with a few settings, but to no avail. In the past I have used Visual C++, with it's wonderful Intellisense, but I'm running Linux at the moment and want an IDE that can (eventually) handle multiple languages and toolchains - for which Eclipse excels.
I've tried googling but found no real help. Does anyone out there have any hints for tweaking Eclipse CDT for better code completion/analysis? Or is this just the nature of non-Visual Studio development?
I'm working on a cross-platform C/C++ code base that has Visual C++ (super majority) & XCode developers. It also needs to compile on Linux, because that's where it's deployed. We are currently using a complicated Unix makefile that's called from Visual C++, XCode, & Unix command line.
However, the makefile project causes several productivity losses for Visual C++ developers:
Slower build times
Intellisense & text search don't work well for files not directly referenced in project
No .h dependency generation (not clear how to do on Windows)
Adding a native Visual C++ project has the following downsides:
lots of work to manage all those separate platform configuration as mentioned here Maybe VC++ 2010's hierarchical property sheets will help.
more work due to syncing makefile with native project
Currently, I'm considering to add a native project for Windows developers. Can anyone offer their experience on what's best or suggest how those problems with either approach can be reduced.
I have considered CMake and personally would use it, but it's going to be hard to convince other people to learn cmake & syncing it with the native projects would be an issue.
I have considered CMake and personally would use it, but it's going to be hard to convince other people to learn cmake & syncing it with the native projects would be an issue.
The nice thing about CMake is that it builds ALL of the configurations for you. You would setup a single CMake project, and then use it to generate VS solutions, XCode projects, and unix makefiles for you.
It's a huge improvement - everybody gets to work in their "native" environment, whether they're on Windows, Mac, or Unix.
I've handled this by writing my own converter that would synch scripts for various embedded development environments. If something like the above answer of using CMake does all that for you, then that would be the way to go. But if its too complex, rolling your own custom tool is not that hard. Just has to synch both ways.
Also, if you don't have it. Visual Assist for visual studio is awesome :)
I am not a fan of makefile generators, cmake, qmake and the like.
I am a fan of make. We have a single makefile (well, several actually but they include each other and there is no recursive make involved) which knows all of the project dependencies on all platforms (windows, wince, linux, mac, ...). This gives:
Makefile is really no more than a list of sources (include dependencies are auto-generated during the build)
Same build command on each platform, apart from specifying the tool chain
Build uses all my CPUs
Very short time-to-do-nothing
Developers can use whatever IDE they fancy
vim, emacs, qtcreator, eclipse, XCode all in use
I often use VC++ when on Windows (for the debugger)
Scriptable. Great way to automate your tests
Nice.
I'm involved in C++ project targeted for Windows and Linux (RHEL) platforms. Till now the development was purely done on Visual Studio 2008. For Linux compilation we used 3rd party Visual Studio plugin, which read VS solution/perojects files and remotely compiled on Linux machine.
Recently the decision was to abandon the 3rd party plugin.
Now my big concern is a build system. I was looking around for cross platform build tools. This way I don't need to maintain two set of build files (e.g. vcproj/solution for Windows and make files for Linux).
I found the following candidates:
a. Scons
b. cmake
What do you think about the tools for cross-platfrom development?
Yet another point that bothers me is that Visual Studio (+ Visual Assist) will loose a lot functionality without vcproj files - how you handle the issue with the tools?
Thanks
Dima
PS 1: Something that I like about Scons is that it
(a) uses python and hence it's flexible, while cmake uses propriety language (I understand that it's not a winner feature for a build-system) (b) self contained (no need to generate makefiles on Linux as with cmake).
So why not Scons? Why in your projects the decision was to use cmake?
CMake will allow you to still use Visual Studio solutions and project files. Cmake doesn't build the source code itself, rather it generated build-files for you. For Linux this can be Code::Blocks, KDevelop or plain makefiles or still other more esoteric choices . For Windows it can be among others Visual Studio project files and still others for MacOS.
So Visual Studio solutions and projects are created from your CMakeLists.txt. This works for big projects just fine. E.g. current Ogre3d uses CMake for all platforms (Windows, Linux, MacOS and IPhone) and it works really well.
I don't know much about scons in that regard though, I only used to build one library and only in Linux. So I can't compare these two on fair ground. But for our multi-platform projects CMake is strong enough.
I haven't used Scons before, so can't say how that works, but CMake works pretty well.
It works by producing the build files needed for the platform you're targeting.
When used to target VC++, it produces solution and project files so from VS, it appears as if they were native VS projects. The only difference is, of course, that if you edit the project or solution directly through VS, the changes will be erased the next time you run CMake, as it overwrites your project/solution files.
So any changes have to be made to the CMake files instead.
We have a big number of core libraries and applications based on those libraries. We maintain a Makefile based build system on Linux and on Windows using the Visual Studio solution for each project or library.
We find it works well for our needs, each library or app is developed either on linux or windows with cross compilation in mind (e.g. don't use platform specific api's). We use boost for stuff like file paths, threads and so on. In specific cases we use templates/#defines to select platform specific solution (for example events). When is ready we move to the other system (linux or windows), recompile, fix warnings/errors and test.
Instead of spending time figuring out tools that can cross compile on both platforms we use system that is best for each platform and spend time fixing specific issues and making the software better.
We have GUI apps only on Windows atm. so there's no GUI to cross compile. Most of our development that is shared between Windows and Linux is server side networking (sockets, TCP/IP, UDP ...) and then client side tools on Linux and GUI apps on Windows.
Using with perforce for source code version management we find in quite many cases that the Linux Makefile system is much more flexible for what we need then Windows VS. Especially for using multiple workspaces (views of source code versions) where we need to point to common directories and so on. On Linux this can be done automatically running a script to update environment variables, on Visual Studio referencing environment variables is very inflexible because it's hard to update automatically between views/branches.
Re sync question:
I assume you are asking how to make sure that the two build systems get synchronized between linux and windows. We are actually using Hudson on Linux and CruiseControl on Windows (we had windows first with cruise control, when I went to setup linux version I figured Hudson is better so now we have mixed environment). Our systems are running all the time. When something is updated it is tested and released (either windows or linux version) so you would know right away if it does not work. During testing we make sure all the latest features are there and fully functional. I guess that's it, no dark magic involved.
Oh you mean build scripts ... Each application has it's own solution, in solution you setup up dependencies. On Linux side I have a makefile for each project and a build script in project directory that takes care of all dependencies, this mostly means build core libraries and couple of specific frameworks required for given app. As you can see this is different for each platform, it is easy to add line to build script that changes to directory and makes required project.
It helps to have projects setup in consistent way.
On Windows you open project and add dependency project. Again no magic involved. I see this kind of tasks as development related, for example you added new functionality to a project and have to link in the frameworks and headers. So from my point of view there is no reason to automate these - as they are part of what developers do when they implement features.
Another options is premake. It's like cmake in that it generates solutions from definition files. It's open source and the latest version is very highly customizable using Lua scripting. We were able to add custom platform support without too much trouble. For your situation it has support for both Visual Studio and GNU makefiles standard.
See Premake 4.0 Homepage
CruiseControl is a good choice for continuous integration. We have it running on Linux using Mono with success.
Here is an article about the decision made by KDE developers to choose CMake over SCons. However I've to point that this article is almost three years old, so scons should have improved.
Here is comparison of SCons with other building tools.
Had to do this a lot in the past. What we did is use gnu make for virtually everything including windows at times.
You can use the project files under windows if you prefer and use gnu make for Linux.
There isn't really a nice way to write cross platform makefiles because the target file will
be different among other things (and pathname issues, \ vs / etc). In general, you'll probably be tweaking the code across the various platforms to take subtle differences into account, so a tweak to a make file and checking on the other platforms would have to happen
anyway.
Many OS projects maintain Makefiles for different platforms such as zlib where they are named like Makefile.win, Makefile.linux etc. You could follow their lead.