c++ - 使用 cmake 将 log4cpp 库链接到项目

标签 c++ cmake log4cpp

我正在尝试将 log4cpp 链接到我的项目。我使用 CMake,但我想不出这样做的方法。

Log4cpp 安装在 projectfolder/log4cpp/上(其中有 bin/include/lib/...)

我使用以下 Findlog4cpp.cmake :

IF (LOG4CPP_FOUND)
    SET(LOG4CPP_FIND_QUIETLY TRUE)
ENDIF (LOG4CPP_FOUND)

FIND_PATH(LOG4CPP_INCLUDE_DIR log4cpp/FileAppender.hh
    "./log4cpp/include/"
)

FIND_LIBRARY(LOG4CPP_LIBRARIES
  NAMES liblog4cpp.so
  PATHS "./log4cpp/lib"
)

SET(LOG4CPP_FOUND 0)
IF(LOG4CPP_INCLUDE_DIR)
  IF(LOG4CPP_LIBRARIES)
    SET(LOG4CPP_FOUND 1 CACHE INTERNAL "log4cpp found")
    IF (NOT LOG4CPP_FIND_QUIETLY)
      MESSAGE(STATUS "Found Log4CPP")
    ENDIF (NOT LOG4CPP_FIND_QUIETLY)
  ENDIF(LOG4CPP_LIBRARIES)
ENDIF(LOG4CPP_INCLUDE_DIR)

MARK_AS_ADVANCED(
  LOG4CPP_INCLUDE_DIR
  LOG4CPP_LIBRARIES
) 

在我的 CMakeLists.txt 中,我称它为:

...
FIND_PACKAGE(log4cpp REQUIRED)
INCLUDE_DIRECTORIES(${LOG4CPP_INCLUDE_DIR})
SET(LIBS ${LOG4CPP_LIBRARIES} ${LIBS})

MESSAGE("############################# ${LOG4CPP_LIBRARIES}")
MESSAGE("############################# ${LOG4CPP_INCLUDE_DIR}")
...

输出:

-- Found Log4CPP
############################# /SOMEPATH/projectfolder/log4cpp/lib/liblog4cpp.so
############################# /SOMEPATH/projectfolder/log4cpp/include
-- Configuring done
-- Generating done
-- Build files have been written to: /SOMEPATH/projectfolder/

然后当我运行 make 时出现以下错误:

/SOMEPATH/projectfolder/common/Common.h:24:31: error: log4cpp/Category.hh: No such file or directory
/SOMEPATH/projectfolder/common/Common.h:25:35: error: log4cpp/FileAppender.hh: No such file or directory
/SOMEPATH/projectfolder/common/Common.h:26:34: error: log4cpp/BasicLayout.hh: No such file or directory

我只是将 header 包含在 common.h 中(#include "log4cpp/xxx.hh")

我补充说,没有 log4cpp,所有构建和编译工作正常(使用 cmake 然后 make)

任何帮助将不胜感激

最佳答案

如果您要将公共(public)目录添加为具有自己的 CMakeLists.txt 的子目录,则需要在调用 ADD_SUBDIRECTORY 之前调用 INCLUDE_DIRECTORIES(如果您已经需要这些目录)包括在内以供传承。

关于c++ - 使用 cmake 将 log4cpp 库链接到项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10580789/

相关文章:

linux - Ceres make 失败 : "Makefile:138: recipe for target ' all' failed"

c++ - 在 C++ 代码中使用的 C header 中转发声明枚举

c++ - 如何在 cmake 中启用 `/std:c++latest`?

php - 如何在网页和实际程序之间进行交互

c++ - 如何使用CMake交叉编译C++ DCMTK项目(从Ubuntu到Windows)

C++ 日志库设置

c++ - 使用自定义工具链编译 log4cpp

c++ - 以通用方式覆盖整数中的一系列位

c++ - QThread阻塞主应用