0

I have a package with 2 variants with the following directory structure

pkg
   pkg_main.h
   CMakeLists.txt
   var1
      pkg_main.cpp
   var2
      pkg_main.cpp
conanfile.py

With conan, I'm trying to define an option fileSelection with possible values var1 and var2. With cmake, I'm trying to do the selection as following: if fileSelection is set to var1, then var1/pkg_main.cpp shall be called, otherwise var2/pkg_main.cpp.

So far, I've defined the option fileSelection in conanfile.py

class PkgConan(ConanFile):
   name = "pkg"
   ...
   options = {"fileSelection : ['var1', 'var2']"}
   default_options = "fileSelection=var1"
   generators = "cmake"

   def build(self): 
      cmake = CMake(self)
      cmake.configure(source_folder="pkg")
      cmake.build()

   def package(self):
       self.copy("*.h", dst="include", src="pkg")
       self.copy("*pkg.lib", dst="lib", keep_path=False)
       self.copy("*.dll", dst="bin", keep_path=False)
       self.copy("*.so", dst="lib", keep_path=False)
       self.copy("*.dylib", dst="lib", keep_path=False)
       self.copy("*.a", dst="lib", keep_path=False)

   def package_info(self):
       self.cpp_info.libs = ["pkg"]

Now I'm struggling to update the CMakeLists.txt file to do the selection according to the value of fileSelection. Something like this:
[here's the logic, not the runnable code]

if("${fileSelection}" STREQUAL "var1") 
   add_library(pkg var1/pkg_main.cpp)
else
   add_library(pkg var2/pkg_main.cpp)
endif

?? How do I pass the fileSelection option to cmake; where and how do I implement the switch between var1 and var2 (am I going in the right direction by trying to define the switch in CMakeLists.txt)?

nicole
  • 91
  • 10
  • Possible duplicate of [Adding command line options to CMake](https://stackoverflow.com/questions/5998186/adding-command-line-options-to-cmake) – Tsyvarev Jun 20 '18 at 11:35

1 Answers1

2

You can pass variables to cmake command line invocation driven by the cmake helper. Something like:

options = {"fileSelection": ["var1", "var2"]}
...

def build(self): 
   cmake = CMake(self)
   cmake.definitions["fileSelection"] = self.options.fileSelection
   cmake.configure(source_folder="pkg")
   cmake.build()

That assumes that you have the CMakeLists.txt logic you describe.

drodri
  • 5,157
  • 15
  • 21