is there any Package Manager for C++? [duplicate] - c++

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 3 years ago.
Improve this question
Just wondering the best way to install cpp packages. My background is in JS/Ruby/etc, so it seems so weird there's no cpm or the like. What am I missing? I assume it's not this simple...
For an example, I can't even run a .cpp file with #include <iostream> as I get fatal error: 'iostream' file not found
Edit for clarity: iostream was a bad example, my system config was wonked back when I wrote this. Replace it in your imagination with a non-standard library.

There seem to be a few though I've never used them.
bpt
https://github.com/vector-of-bool/dds
cpm
http://www.cpm.rocks/
conan
https://conan.io/
poac
https://github.com/poacpm/poac
pacm
http://sourcey.com/pacm/
spack
https://spack.io
buckaroo
http://buckaroo.pm
hunter
https://github.com/ruslo/hunter
vcpkg
https://github.com/Microsoft/vcpkg

Conan is the clear winner today based on its 36+ GitHub contributors and the fact I found their Getting Started documentation to be easy enough to get working. It's MIT licensed too.
Conan's documentation even compares it to biicode which I was surprised wasn't mentioned in other answers, but biicode seems to be abandoned much like cpm.
pacm has some activity but is LGPL which may be an issue for some projects.
This builds on user3071643's answer, thanks!

No, there certainly isn't an official package manager for C/C++, but I'll give you a few suggestions to hopefully make your days better.
First, I would suggest investigating CMake or GENie for ways of incorporating libraries in your build system in an extensible and cross-platform way. However, they both assume that you have libraries that are in an "easy to find" place or that they have the same build system as your project. There are ways to teach both how to find libraries that you need. All other solutions are platform specific.
If you have Node.js or Haxe in your project, then both npm and haxelib do have ways that you can use C++ (in a precompiled dll/so form) from JavaScript or Haxe respectively, but that's a big, and probably wrong, assumption that you'd be using Node.js or Haxe in a project that really needs the benefits that C/C++ can provide.
For the Microsoft world, I believe that NuGet has some C++ libraries, although it's limited in its platform support to Visual Studio, and probably Windows, but it probably best fits what you mean by "package system" given your examples (assuming that you meant that cpm was a C Package Manager in the way that npm is Node Package Manager).
For the Linux world, technically, rpm, yum, and apt-get do function as C/C++ development package managers just as much as a system package manager, but unlike npm, you must always install packages globally, but given that your app, if it's a Linux app, would likely be in a package on one or more of these managers, and packages have a dependency list embedded in them, it's not much of a problem.
For the macOS/iOS world there's CocoaPods, but, like, NuGet, you're locked-in to the Apple platform. There is always MacPorts, if you are happy with the Linux-style package manager as a dev package manager, as described in the previous paragraph.
I want this npm, local install, sort of functionality cross-platform as well, but since C/C++ is used on so many platforms (all of them?), and C/C++ programmers, like myself, tend to roll their own... everything, which keeps us all (unnecessarily?) busy, there hasn't been much of a push for making such a project, which is a shame. Perhaps, you should make one? It would certainly make my days better.
UPDATE
Conan is the C/C++ package manager that we've all been wanting. It has both local and global servers, so it's good for both business and open source packages. It's young, and its global repository doesn't have very many packages. We should all work to add packages to it!
UPDATE 2
I have found that vcpkg has been very useful for Windows and Android. If you can't get over the fact that Conan.io is written in Python, then it might be worth a look.
Also, although it mandates that you use it for yourself and all of your dependencies, I believe that Build 2 should be the ultimate winner in a few years, but as of the time of writing, it's still upcoming.

The other answers have mentioned the competing solutions, but I thought I would add my experiences. I did some research into package managers and build systems for $WORK. We were greenfield so anything was on the table. These are my findings, YMMV.
Conan
Claims to support every build system but you need to write these Python scripts to tell Conan how your build works. Lots of magic, and easy to misconfigure. You also need to manage remotes, local remotes, etc. using conan create. We wanted something simple and this put me off. IDE integration did not work reliably (due to the Python scripts). I asked about reproducible builds and they said it is as reproducible as you want to make it. So it is not really reproducible.
https://conan.io/
Hunter
All packages are defined inside a single repository. You need to fork to add packages. Everything is driven by CMake. We want to deprecate CMake internally due to poor syntax, non-reproducible builds, and all the other issues you probably know already. Hunter offers reproducible installations of packages because you put Hunter in source-control, which is excellent.
https://github.com/ruslo/hunter
Buckaroo
Opinionated but simplest solution. No need to manage remotes or forks of package lists since all packages are just Git repos. We use GitHub private so this was a plus for us. We were a bit hesitant about using Buck build system, which they require. Turns out the Buck gets most things right (I used and liked Meson & Bazel in the past), and writing Buck files was less work than integrating CMake projects anyway. Also, and this was big for us, Buckaroo actually supports Java too. Maven support was hacky though. We were able to create iOS and Android builds from a single build tool / package manager. Documentation is poor but they were responsive to my emails. Needs more packages.
https://buckaroo.pm/
VCPKG
Similar to Hunter but from Microsoft. They don't have older versions of packages which might be a problem. Again everything is done in CMake, so builds get more complex and slower over time. I think VCPKG has the most packages of all solutions.
https://github.com/Microsoft/vcpkg

No, there's no package manager for C++ libraries. There are various ways to install C++ libraries, as with any other software: through your operating system's package manager, by building from a source tarball, or, in the case of proprietary software, by running some installation program.
Note that if #include <iostream> doesn't work, then your compiler or development environment is simply not installed correctly. I believe Super User is the site where you can ask for help with that sort of thing.

Related

Is vcpkg a valuable choice for shipping open-source and cross-platform C++ library [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed last month.
Improve this question
I am a Linux user and only developed on Linux. I know how to use Make and CMake to build my libraries but as I progress and scale up the difficulties of my projects I must now address cross-platform compatibility with minimal user input.
Is vcpkg a good choice in order to achieve my goal? If not, is the choice of using a package manager a reasonable one in developing Windows application?
My objective is that Windows users of my libraries shall use them with minimal effort after download and installation, i.e. by including the relevant headers and ideally, if using Eclipse or MSVC, don't have to worry to compile and link against the static.
Bear in mind that I am not a professional software developer but a computational scientist that is trying to not mess up the software engineering part of his job while at the same time trying to make the life of end-users (other comp scis fellows) as easy as possible.
What I am looking for is a perspective as to what can be today considered as the de-facto standard in building, shipping and using libraries across multiple OSs.
This will be a VERY controversial opinion but I want you to take it with sincerity since it comes from years of professional experience with several package managers.
Yes, vcpkg is the best package manager out there for both Windows and Linux equally.
Many people will promote Conan as the best thing out there but my experience with it is that it is chaotic at best. You add packages A and B that depend on package C (say boost) but of different versions. It is dependency hell.
vcpkg on the other hand, has a curated list of versioned libraries that are 100% compatible with each other. So you are guaranteed that any combination of packages you are sourcing from vcpkg will not cause linkage problems to your application. It is extremely stable and professional in that sense.
Once you are ready to upgrade your dependencies, say after a year or two, you just upgrade to a new blessed version from vcpkg, which is also inter-compatible. So no surprises, no days googling and getting mad at StackOverflow looking to solve weird compiler errors.
In the past company I worked, a large options trading firm in Chicago, they had ONE guy taking care of publishing internally the vcpkg packages on demand. We are talking about +250 packages that were not available on the O/S (Redhat). Everything was smooth and the CD/CI pipeline through Jenkins was great, by the book.
Then a couple of desks pushed hard to get Conan installed because they wanted to have the latest packages, meaning packages that were less than 6 months old from release. Well guess what happened then. Groups could not reuse software they built from each other because their dependencies were completely incompatible with each other. The IT groups writing plumbing libraries were suddenly unable to fulfill requests from the desk groups because once they linked against their libraries, it would frequently clash with the libraries used by their applications. Everything started to break. CD/CI was no more because it was impossible to make Jenkins ingest that amount of custom scripting. Packages stopped being published by a central blessed firm source and groups started compiling their own binaries, frequently straight from their home folder $HOME/stuff into production machines located inside the exchanges. Scary stuff.
Finally they hired a team of 7 consultants that were in charge of the build system and Conan. Well good thing the consultant firm was friends with the CIO, if you see what I mean.

How to install spread library on Windows

Ther are many articles about how to install spread library on Linux(1. download source & unzip it 2.run ./config 3. make 4. make install) but seems no article about how to install spread on Windows......
I had downloaded spread-bin-4.4.0-Windows8_x64 from official site(my environemnt is win10), but there is no .bat or .exe file found under the unzipped folder. Does anyone know how to install spread library on Windows?
In linux, there is a standard way of installing libraries that all the software on your machine is supposed to use. In part this works because all that software is chosen in such a way that the same versions of libraries will satisfy everyone, that's what makes up a linux distribution to some extent.
In windows, the model of development is totally different. Any third party software, not from microsoft, is something the customer paid for and microsoft never signs off on it or anything. Third party stuff generally is supposed to provide its own libraries since you have no idea what other third party stuff is present. There's not much point in globally installing things since most programs won't use what you globally install anyways.
So, if you have a library on windows, you should install in whatever way the program that you intend to use it with will find it. If you are intending to install it for use with a project you are developing, that is a different question, and ultimately one about your build system or IDE.
In modern days there are things like NuGet which allow you to do things in a more linuxy way on windows. But that's quite recent and not that much software from typical user's perspective gets its dependencies that way.
After further study, I found a Visual Studio solution file:spread.sln under \win32 folder! So in conclusion, to install Spread libarary on Windows:
1. get source codes from http://www.spread.org/download.html
2. unzip
3. open solution file under \win32 folder with Visual Studio
(Please note that "do not" use relatively new version of VS since this solution is built with older VS(like VS 2010) otherwise unexpected errors occurred)
4. build solution
There you go! You can build your project with Spread library now!
P.S. This spread.sln is a Win32 solution. I'm just wonder is there a Win64 version solution file......

Does C++ have a package manager like npm, pip, gem, etc? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 3 years ago.
Improve this question
Just wondering the best way to install cpp packages. My background is in JS/Ruby/etc, so it seems so weird there's no cpm or the like. What am I missing? I assume it's not this simple...
For an example, I can't even run a .cpp file with #include <iostream> as I get fatal error: 'iostream' file not found
Edit for clarity: iostream was a bad example, my system config was wonked back when I wrote this. Replace it in your imagination with a non-standard library.
There seem to be a few though I've never used them.
bpt
https://github.com/vector-of-bool/dds
cpm
http://www.cpm.rocks/
conan
https://conan.io/
poac
https://github.com/poacpm/poac
pacm
http://sourcey.com/pacm/
spack
https://spack.io
buckaroo
http://buckaroo.pm
hunter
https://github.com/ruslo/hunter
vcpkg
https://github.com/Microsoft/vcpkg
Conan is the clear winner today based on its 36+ GitHub contributors and the fact I found their Getting Started documentation to be easy enough to get working. It's MIT licensed too.
Conan's documentation even compares it to biicode which I was surprised wasn't mentioned in other answers, but biicode seems to be abandoned much like cpm.
pacm has some activity but is LGPL which may be an issue for some projects.
This builds on user3071643's answer, thanks!
No, there certainly isn't an official package manager for C/C++, but I'll give you a few suggestions to hopefully make your days better.
First, I would suggest investigating CMake or GENie for ways of incorporating libraries in your build system in an extensible and cross-platform way. However, they both assume that you have libraries that are in an "easy to find" place or that they have the same build system as your project. There are ways to teach both how to find libraries that you need. All other solutions are platform specific.
If you have Node.js or Haxe in your project, then both npm and haxelib do have ways that you can use C++ (in a precompiled dll/so form) from JavaScript or Haxe respectively, but that's a big, and probably wrong, assumption that you'd be using Node.js or Haxe in a project that really needs the benefits that C/C++ can provide.
For the Microsoft world, I believe that NuGet has some C++ libraries, although it's limited in its platform support to Visual Studio, and probably Windows, but it probably best fits what you mean by "package system" given your examples (assuming that you meant that cpm was a C Package Manager in the way that npm is Node Package Manager).
For the Linux world, technically, rpm, yum, and apt-get do function as C/C++ development package managers just as much as a system package manager, but unlike npm, you must always install packages globally, but given that your app, if it's a Linux app, would likely be in a package on one or more of these managers, and packages have a dependency list embedded in them, it's not much of a problem.
For the macOS/iOS world there's CocoaPods, but, like, NuGet, you're locked-in to the Apple platform. There is always MacPorts, if you are happy with the Linux-style package manager as a dev package manager, as described in the previous paragraph.
I want this npm, local install, sort of functionality cross-platform as well, but since C/C++ is used on so many platforms (all of them?), and C/C++ programmers, like myself, tend to roll their own... everything, which keeps us all (unnecessarily?) busy, there hasn't been much of a push for making such a project, which is a shame. Perhaps, you should make one? It would certainly make my days better.
UPDATE
Conan is the C/C++ package manager that we've all been wanting. It has both local and global servers, so it's good for both business and open source packages. It's young, and its global repository doesn't have very many packages. We should all work to add packages to it!
UPDATE 2
I have found that vcpkg has been very useful for Windows and Android. If you can't get over the fact that Conan.io is written in Python, then it might be worth a look.
Also, although it mandates that you use it for yourself and all of your dependencies, I believe that Build 2 should be the ultimate winner in a few years, but as of the time of writing, it's still upcoming.
The other answers have mentioned the competing solutions, but I thought I would add my experiences. I did some research into package managers and build systems for $WORK. We were greenfield so anything was on the table. These are my findings, YMMV.
Conan
Claims to support every build system but you need to write these Python scripts to tell Conan how your build works. Lots of magic, and easy to misconfigure. You also need to manage remotes, local remotes, etc. using conan create. We wanted something simple and this put me off. IDE integration did not work reliably (due to the Python scripts). I asked about reproducible builds and they said it is as reproducible as you want to make it. So it is not really reproducible.
https://conan.io/
Hunter
All packages are defined inside a single repository. You need to fork to add packages. Everything is driven by CMake. We want to deprecate CMake internally due to poor syntax, non-reproducible builds, and all the other issues you probably know already. Hunter offers reproducible installations of packages because you put Hunter in source-control, which is excellent.
https://github.com/ruslo/hunter
Buckaroo
Opinionated but simplest solution. No need to manage remotes or forks of package lists since all packages are just Git repos. We use GitHub private so this was a plus for us. We were a bit hesitant about using Buck build system, which they require. Turns out the Buck gets most things right (I used and liked Meson & Bazel in the past), and writing Buck files was less work than integrating CMake projects anyway. Also, and this was big for us, Buckaroo actually supports Java too. Maven support was hacky though. We were able to create iOS and Android builds from a single build tool / package manager. Documentation is poor but they were responsive to my emails. Needs more packages.
https://buckaroo.pm/
VCPKG
Similar to Hunter but from Microsoft. They don't have older versions of packages which might be a problem. Again everything is done in CMake, so builds get more complex and slower over time. I think VCPKG has the most packages of all solutions.
https://github.com/Microsoft/vcpkg
No, there's no package manager for C++ libraries. There are various ways to install C++ libraries, as with any other software: through your operating system's package manager, by building from a source tarball, or, in the case of proprietary software, by running some installation program.
Note that if #include <iostream> doesn't work, then your compiler or development environment is simply not installed correctly. I believe Super User is the site where you can ask for help with that sort of thing.

Are there any efforts to create a package manager for C++? [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
We don’t allow questions seeking recommendations for books, tools, software libraries, and more. You can edit the question so it can be answered with facts and citations.
Closed 8 years ago.
The community reviewed whether to reopen this question last year and left it closed:
Original close reason(s) were not resolved
Improve this question
One of my biggest frustrations with my favorite language is the effort it takes to get different libraries working for together under one unified development environment. My biggest wish is to just be able to tell my IDE, or whatever, that I need a certain library, and it takes care of downloading it, compiling it(if necessary), installing it, then setting up the include and library paths.
What I want is this, but for C++. I would prefer if it works with Visual Studio, but gcc is okay too. Or if it is it's own separate system, that's fine too. It does, however, have to work in Windows.
What promising projects are out there to solve this problem?
Have you considered Git as a package manager? I've been using git submodules for dependencies and sub-dependencies and combined with free git hosting services, the idea is quite powerful.
Just go into your git project,
git submodule add git://somehosting.com/you/package.git
git submodule init package
git submodule update package
cd package && ./configure --stuff && make && cd ..
To select particular dependency versions,
cd package && git checkout v3.2 && cd .. && git add package/
git commit -am "package version 3.2 pinned" && git push
Now you've pinned your package dependency to a particular tag and saved your settings to your project repository. Next time someone does:
git pull && git submodule update
Their package dependency will also be pinned to v3.2.
Some package management systems also feature signed packages. Git allows you to GPG sign your tags and lets people verify it by adding your public key to their keyring.
So we have package downloading, dependency versions and we can emulate "package signing". One missing part is pre-built binaries which, in my opinion isn't an absolute necessity. Another missing part is global package management. You will have to manually manage each git repository when a dependency of a dependency gets updated.
The answer is to use Conda for packaging/dependency management and whatever tool you like for building (I use CMake).
Check it out here:
http://conda.pydata.org/
Conda is similar to package managers like apt-get, yum, nuget, etc, but with several important advantages:
1) fully cross-platform (currently Linux, Windows, and OSX, but other platforms can be added easily)
2) does NOT require root access to use. In fact, doesn't care about your system packages at all. It's similar to building out an entire stack (down to libc if you want) in your homedir, except somebody already built them for you. This magic is achieved by making packages relocatable.
3) you can maintain as many different environments as you want side-by-side. Does one of your applications require python 2.7.6, but another one needs python 2.7.4? No problem - they can coexist in peace
4) you will never again be forced to maintain separate builds for the various Linux distros. A properly-constructed Conda environment will work on any of them. Don't forget other platforms as well (e.g. Windows and OSX)!
5) you are no longer married to versions of libraries that were decided FOR you by a system or an IT department. For example, I was forced to work on RHEL5 nodes. The Python there is a joke (over 10 years old now). By using Conda I bypassed that pain and was able to work on any version of Python that I wanted without affecting anybody else.
6) environments can be zipped up into "installers" for distribution.
7) you can maintain your own private repository behind your firewall for proprietary libraries. The public centralized repository is called Binstar. Your dependencies can come from either (or both).
Many people mistakenly believe that Conda is a Python-only system, but actually Conda was created for native packaging (it is language agnostic). It has a huge Python presence simply because its original motivation was to overcome terrible native library support in Python's other packaging system (pip + pypi).
The only problem with Conda currently is that Binstar (the central repository) doesn't have every package yet. You will definitely encounter missing libraries that you want - but that's easy to fix: you can build whatever package you like yourself and push it to Binstar. I've had to do this for dozens of native libraries. It works quite well.
I'll never go back to system dependency managers when developing C++ code.
This is unlikely to occur simply because differing C++ libraries often use VASTLY different build systems. Autoconf, scons, make, MSBuild, VCBuild, Boost Jam, CMake, NMake, and QMake are examples. Additionally, a lot of C and C++ developers generate code with tools like Yacc and Bison.
Maven and NuGet work the way they do because they support ecosystems with (relatively) little variation in build tools. Ant in Maven's case, MSBuild in NuGet's case. Building a similar system to work with the vast array of C++ build systems in use would be infeasible and impractical (given the seeming lack of demand for such systems).
As of NuGet 2.5, NuGet supports native projects. However, making the package by hand is pretty complex, so they suggest using CoApp's Powershell Tools for NuGet (documentation here). Using these tools, you can now host your C/C++ packages on NuGet.
If you are using MinGW, there is already a package manager similar to apt-get / aptitude which does what you want: mingw-get
It behaves similar to Debian's apt-get/aptitude. Among the packages that are already included you can find expat, libxml2, zlib, pthread etc.
Obviously, you will need a copy of MinGW to start working with it.
I've been working on a cross-platform and cross-architecture distributed package manager. All packages are installed in the project directory (a bit like how nodejs works). It is a work in progress.
ryppl seems to be doing what you required and more, cross platform:
Our mission [is] to create the conditions for a portable, modular C++ software ecosystem
Already starred them on GitHub: https://github.com/ryppl/ryppl
There is Daveed's module proposal, which didn’t make it into C++0x.
There is CoApp, which seems to have Microsoft's support.

open source dev environment for C++: what's better? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
I want to do some coding in my spare time, but the thing is, I don't want to spend the money on this.
Would the following set of development tools be The Right Thing, or is there something I'm forgetting?
Eclipse for C++
SVN for source control
Qt for UI development (since it's C++, and I believe it's now opened by Nokia)
hudson for continuous integration
I'd like to write a little image processing application that can run on any platform, but the main platform at the moment will be Windows with a possible movement to the Mac-- hence all the cross-platform tools.
Is there anything really obvious I'm forgetting? Like something like fxcop for style checking in C++?
If I use any libraries, I'd like to avoid GPL libraries; if things go south with my current employer, I'll want to monetize this.
Microsoft Visual C++ Express is free and easily the best IDE for Windows. Furthermore, you can use it to work on cross-platform code - it more depends on writing standards-adhering code and using portable libraries.
If you want to write cross-platform code, I recommend a cross-platform build tool. I use CMake, which generates Visual Studio solutions on Windows, but there are others too, such as SCons.
As for libraries, it depends on what exactly you need to do. Qt is an excellent GUI library. libpng/libjpeg and others are good for loading/saving images at a low level, but there are probably other higher-level image libraries as well.
[edit] A response to the comment about MSVC and Qt:
A quick search brings up Trolltech's Qt Visual Studio Integration page:
Qt Visual Studio .NET Integration
A comment points out that this is actually not free (a free addon is available at this link, but this runs Qt designer outside of Visual Studio. Also, the Express version of Visual Studio does not support plugins.
For coding specifically in Qt there is another new IDE created by Qt: Qt Creator. I've heard good things about it, and it is also portable across Windows, Linux, and Mac.
I detect procrastination (something I'm often guilty of) - just write some code - you can always add tools as you go along.
The problem with questions with phrases like "what's better" is that it's really hard to determine what's right in a specific situation and maybe impossible what's "better".
Said that, I use Eclipse CDT sucessfully as an IDE on Linux. I use frameworks like ACE/TAO to create code that is highly portable.
I know that QT is a very good UI framework. KDE is built on top of KDE and if you use KDE/Linux then you may also want to look at KDevelop, a C++ IDE that has many users.
In the end I believe that you and only you can figure out whats best for you to use. Make sure you check the alternatives and then make an educated decision.
for c++ there are a few more freewares available such as codeblocks and devcpp. I find eclipse very heavy on the machine.
There are many tools that make the difference:
A C++ compiler ... (it wasn't in your list)
doxygen
STLfilt (which is a must have when programming in C++)
A UT framework (CxxTests, boost.test, Fructose, google.test, ...)
something to manage the compilation chain (scons, aap, (b)jam, cmake, ...) -- I've no idea what eclipse is using.
Source control: git. It's not as diffucult as people make it seem. I'm an svn newbie and I still managed to learn the basics of git for use in everyday life! There are about 4 or 5 basic commands that will get you going in no time. Read the official git tutorial
Regarding IDE's, there are a few choices
Microsoft Visual C++ Express Edition (free lite version)
Eclipse with CDT
QtCreator. (Since you're using Qt for the GUI)
Personally I have used Eclipse+CDT for a number of projects. Paired with wxWidgets it has provided me with enough to keep myself pretty much crossplatform (which I think is a big plus).
Also QT has some interesting releases with an IDE now, make sure you check it out: http://www.qtsoftware.com/products/developer-tools
Like earlier suggestion, just start coding, you will eventually find out what is the appropriate mix for you. It varies greatly between individuals what is the "best" IDE or mix of command line tools, etc.
Eclipse CDT is making huge strides, and even organizations that were unx tools only are now finally joining the IDE bandwagon. Considering downloading a current milestone, not the official release.
If you're using windows, don't use Eclipse directly, find a third-party distribution that already has all the GNU tools in it (I forgot the name, I can look it up).
Once you switch to mac it's easier, but make sure to install xcode to get your GNU tools.
If you are using svn - VisualSVNServer is an excellent free GUI based way to setup and administer your SVN repository, definitely worth checking out as it means you have little/no messing about with config files etc. to change your repository.
Regarding version control - Subversion is pretty much standard and is very well supported. From what I've heard, Git is more powerful but harder to use; it's worth a look for a new one-man project, since you wouldn't have the support and retraining concerns that other projects would have.
Regarding IDE, since Visual C++ Express is currently the highest-voted answer - I've used both Eclipse and Visual C++ Express. I don't have a whole lot of experience with Visual C++ Express, so it might have features that I've overlooked, but from what I've been able to compare, Eclipse offers a lot more features. I tried to list its more impressive features in this answer; from what I've been able to see, Visual C++ Express doesn't have any of the features listed there. Eclipse is slower and more resource-intensive, but with a fast enough desktop, its extra features are more than worth it.
In terms of version control, use git and throw your project on GitHub or Gitorious. There's really no reason to use Subversion anymore, due to its painful branching and merging, and lack of a distributed model.
See this link here for why Git is better than X:
http://whygitisbetterthanx.com/
There's also no point in using Sourceforge or GNU Savannah, as the Git front-end sites have much more valuable features and are easier to use.