使用忍者生成可执行文件时出现问题。与柯南配合使用

时间:2018-07-18 14:59:03

标签: c cmake ninja conan

下一个问题是,当我打算生成应用程序的可执行文件时,系统会向我显示下一条消息:

undefined reference to `sum'
undefined reference to `rest'
undefined reference to `multi'

对于div,应用程序向我显示了错误的结果。

我可以创建程序包,也可以使用Cmake进行编译,并且系统不会向我显示错误,但是当我打算生成可执行文件时,系统会向我显示这些消息,我也不知道为什么,所以我向您展示我的使用者文件,例如CMakeLists和conanfile。我希望您能帮到我!

CMakeLists。 txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(Example C)

include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
conan_basic_setup()

SET(MyExample_SRC 
"main.c")

add_executable(example ${MyExample_SRC})
target_link_libraries(example ${CONAN_LIBS})

conanfile.txt

[requires]
Exa/0.1@edwin/testing

[generators]
cmake

这是我用来创建程序包的conanfile.py:

from conans import ConanFile, CMake, tools


class ExaConan(ConanFile):
   name = "Exa"
   version = "0.1"
   settings = "os", "compiler", "build_type", "arch"
   generators = "cmake"

    def source(self):
        #self.run("CD C:/projects/connan-example/pkg")
        pass

    def build(self):
        self.run("CD C:/projects/connan-example/pkg/ & Compile.bat")
        #cmake = CMake(self)
        #make.configure(source_folder="connan-example")
        #cmake.build()

    def package(self):
        self.copy("MultiDiv.obj", dst="objects", keep_path=False)
        self.copy("SumRest.c", dst="source", keep_path=False)
        #self.copy("*.lib", dst="lib", keep_path=False)


    def package_info(self):
        #self.c_info.libs = ["example"]
        pass

Compile.bat只是为MultDiv创建文件.obj,就像文件所示,我正在包装MultiDiv和SumRest。当我使用gcc命令编译并生成可执行文件时,我可以成功完成

1 个答案:

答案 0 :(得分:0)

您缺少一些信息:

  • 您在CMakeLists.txt中看到的${CONAN_LIBS}变量从依赖项package_info()方法获取其值。由于您的package_info()方法为空,因此它不会将信息传递给使用者,因此他们不需要如何链接。
  • 您没有使用适当的库。您需要创建一个实际的静态“ .lib”,“。a”库或共享库,并将其打包到"lib"目录中。或者,如果未将其打包(在package()方法中)到该目录,则相应地定义self.cpp_info.libdirs=["yourlibdir"]
  • 即使可以在CMake中使用对象“库”,也不能完全将它们用作CMake中的目标(我认为它是在最近的CMake 3.12中添加的)