Comments (5)
Hi @bkarasm
Trying to understand the issue. You mean that it is 100% mandatory that the project above is always inside a mylib
folder in the file system, and that somehow the build system should add the parent directory of the mylib
folder as include-dir
?
And if that is the case, how would you build that in the Conan cache? because in the conan cache, for sure the mylib
folder will not exist, so it is basically impossible to make it conan create
in the Conan cache?
from conan.
Correct, if I clone the git repo for my development work, I'll clone into mylib
but when I create a package mylib
directory is not created in the conan cache. I could instruct git to clone into mylib
subfolder inside conan cache. However, if I do that I would have to tell CMake that in conan build
context CMakeLists.txt
is in root folder and in conan create
context it is in mylib
subfolder.
I could probably check if the absolute path has $CONAN_HOME substring but I was hoping there is a different way.
from conan.
I could instruct git to clone into mylib subfolder inside conan cache.
I am not sure how this would be done. If the recipe contains a source()
that downloads itself? Kind of a scm
approach in https://docs.conan.io/2/examples/tools/scm/git/capture_scm/git_capture_scm.html?
I think it would be good to start with a recipe that can build this in the cache with conan create
and try to understand from there how it could be built locally too.
from conan.
I have created a small repo with an example that shows the problem: https://github.com/bkarasm/mylib
I can't figure out how to setup the paths in conanfile so that both conan create
and conan build
work.
from conan.
Thanks for the repo.
I have been playing with it, and I think the problem is that the layout is ill-formed, and it won't have any elegant solution.
I have managed to make it work with:
diff --git a/conanfile.py b/conanfile.py
index 24efb46..e0045b0 100644
--- a/conanfile.py
+++ b/conanfile.py
@@ -1,6 +1,6 @@
from conan import ConanFile
from conan.tools.cmake import CMake, CMakeDeps, CMakeToolchain, cmake_layout
-from conan.tools.files import update_conandata
+from conan.tools.files import update_conandata, save
from conan.tools.scm import Git
import os
@@ -33,12 +33,13 @@ class MyLibConan(ConanFile):
)
def layout(self):
- return cmake_layout(self, src_folder="mylib")
+ cmake_layout(self)
def source(self):
- git = Git(self)
+ git = Git(self, folder="mylib")
git.clone(url="[email protected]:bkarasm/mylib.git", target=".")
git.checkout(commit=self.conan_data["sources"]["commit"])
+ save(self, "CMakeLists.txt", "add_subdirectory(mylib)")
The trick is to generate an extra CMakeLists.txt in the cache. There could be other similar tricks with the knowledge that source()
will not run locally, only in the cache.
Still, it is a hack, and the recommendation would be to fix the #include "mylib/..."
locally without a local "mylib" folder (excluding the parent clone folder)
from conan.
Related Issues (20)
- [question] Please help how to use NuGet Libraries with Conan and CMake for Builds. HOT 1
- Error uploading file: conanmanifest.txt, '404 Client Error: Not Found for url: https://artifactory.com/artifactory/api/conan/conan-test/v2/conans/xxx/revisions/b9c4826ad9445ea5257f6432b5a019dd/files/conanmanifest.txt[bug] HOT 3
- [question] Confusion around python_requires using minor_mode HOT 6
- [bug] incorrect paths generated by pkgconfigdeps.py when using --deployer option HOT 1
- [question] Filtering options for package to get path to local cache HOT 4
- [bug] `conan list` filtering option asks users to use scope patterns when those don't work in that context HOT 2
- [question] Set cmake_find_mode for all deps in CMakeDeps [conan 2] HOT 2
- [feature] Option to suppress generation of script files HOT 2
- [bug] Initial setup for Conan test suite is not automated or documented HOT 3
- [question] disable package revisions HOT 3
- [bug] `conan source` does not actually get `global.conf`'s `core.` confs HOT 1
- [question] Install a binary package without matching the compiler version HOT 3
- [question] preset name != profile name HOT 4
- [question] Include jinja profile template into another HOT 7
- [question] How to disable compatilibity? HOT 5
- [question] CMAKE_INSTALL_PREFIX in toolchain - local/cache build difference [conan 2] HOT 3
- [feature] Introduce os.version or os=Ubuntu in profiles HOT 2
- [question] PUBLIC compile definition not propagated HOT 3
- [question] How to access a value defined in the `[conf]` section of a profile? HOT 1
- [feature] Add properties to MakeDeps generator HOT 3
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from conan.