c++ - 使用 conan 和 cmake 选择文件

标签 c++ cmake conan

我有一个包含 2 个变体的包,其目录结构如下

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

conan ,我试图用可能的值 var1var2 定义一个选项 fileSelection。 使用 cmake,我尝试按如下方式进行选择:如果 fileSelection 设置为 var1,则 var1/pkg_main.cpp 应为调用,否则 var2/pkg_main.cpp

到目前为止,我已经在 conanfile.py

中定义了选项 fileSelection
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 选项传递给 cmake;我在哪里以及如何实现 var1var2 之间的切换(我尝试在 CMakeLists.txt 中定义切换是否朝着正确的方向前进)?

最佳答案

您可以将变量传递给由 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 逻辑。

关于c++ - 使用 conan 和 cmake 选择文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50946654/

相关文章:

qt - CMake:安装两个 Qt 版本时查找 Qt 包

c++ - 当 lib 文件夹中同时存在静态和共享 C++ 库时,仅链接静态库

c++ - 带柯南的 Cmakelists

android - 有没有办法使用 C++ 通过服务器实现 GCM(或 CCS)?

c++ - 允许在派生类上使用流运算符

c++ - C++0x 中没有 Unicode 流?为什么?

visual-studio - cpp 文件中的 Qt、CMake、Visual Studio 和 Q_OBJECT

c++ - visual c++ 2010调试问题

build-automation - 从 cmake 测试是否存在支持 cuda 的 GPU 的最简单方法是什么?

c++ - 适用于 C++ 的其他包含路径和链接器选项 Gradle