-
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).
-
InfluxDB
InfluxDB – Built for High-Performance Time Series Workloads. InfluxDB 3 OSS is now GA. Transform, enrich, and act on time series data directly in the database. Automate critical tasks and eliminate the need to move data externally. Download now.
-
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?
-
My Neovim setup for Mac for coding (in Go), writing and boosting your productivity in 2024
-
Conan: Your Embedded Cross-Compilation Champion
-
Jeffrey Snover and the Making of PowerShell
-
Are We Modules Yet?