Our great sponsors
-
WorkOS
The modern identity platform for B2B SaaS. The APIs are flexible and easy-to-use, supporting authentication, user identity, and complex enterprise features like SSO and SCIM provisioning.
Arguably, CMake is the standard tool to structure and build C++ projects. The tool is very easy and intuitive to use. But sometimes it might get tricky and some unexpected problems might pop up. And it might take a significant amount of time to understand what is going on. In this example I will show one of such problems I encountered recently. I tried to reproduce the problem with a very much simplified project (which can be found here).
How come? I included climits just a couple of lines above. And it worked with conan create, and the commands that I executed manually just replicated the create command. Almost. I checked the build cache and saw that the folder with the successful build listed /usr/include/c++/v1/limits.h (inside CMakeFiles/main.dir/main.cpp.o.d). And failed build listed models/limits.h. So, it used the file from the project but the case of the filename was ignored. Obviously, there was a difference between conan create and executing commands manually. Namely, conan source. Internally, the first thing that gets executed with conan create is copying the sources under ~/.conan/data/.... So filesystems must be different for these two locations. Indeed, I used multipass to spawn Ubuntu VMs, and it internally uses SSHFS to mount local filesystem inside a remote machine. But the local filesystem (APFS in my case) is case-insensitive. And since the models directory was included by the target, the file Limits.h was found and used in place of limits.h. To solve the problem one has several options:
In fact, I faced this problem when I tried to build one of my projects inside an Ubuntu VM. The project is CMake-based C++ project and is being packaged by the conan. I mounted the project directory inside the running Ubuntu VM instance (the host is MacOS) and built the project with conan create command. Everything was fine. But when I tried to use local development workflow I got the following error:
Related posts
- Are there "IT"? companies where I can send my computer in to have them set up my computer so certain libraries or headers are added to my paths and set up my coding environments?
- The xz attack shell script
- My first Software Release using GitHub Release
- Anyone else frustrated with Conan2?
- OpenSSL as a git submodule?