Выбор файла с помощью conan и cmake

У меня есть пакет с 2 вариантами со следующей структурой каталогов

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

С конан, Я пытаюсь определить вариант fileSelection с возможными значениями var1 а также var2,
С помощью cmake я пытаюсь сделать выбор следующим образом: если fileSelection установлен в var1, затем var1/pkg_main.cpp должен называться, в противном случае var2/pkg_main.cpp,

До сих пор я определил вариант fileSelection в 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"]

Сейчас я пытаюсь обновить CMakeLists.txt файл для выбора в соответствии со значением fileSelection, Что-то вроде этого:
[вот логика, а не исполняемый код]

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

?? Как мне пройти fileSelection возможность сделать; где и как мне реализовать переключение между var1 а также var2 (я иду в правильном направлении, пытаясь определить переключатель в CMakeLists.txt)?

0

Решение

Вы можете передавать переменные в вызов командной строки cmake, управляемый помощником cmake. Что-то вроде:

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

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

Это предполагает, что у вас есть логика CMakeLists.txt, которую вы описываете.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]