将项目与CMakeLists.txt合并到我的主项目中

时间:2015-08-22 13:56:41

标签: c++ ubuntu cmake makefile

我获得了一个C ++项目,它具有以下结构:

/main.cpp
/CMakeLists.cpp
/engine/engine.cpp
/engine/CMakeLists.txt
/utils/utils.cpp
/utils/CMakeLists.txt

/utils/utils.cpp中,有一行#include <cuda_runtime.h>。现在,在我的机器上,此头文件位于/usr/local/cuda-7.0/targets/x86_64-linux/include。但是如果我在上面CMakeLists.txt所有三个中打印出cmake的include目录,请使用:

get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "include dir = '${dir}'")
endforeach()

然后它会打印出以下内容:/usr/include/usr/local/include/usr/local/cuda-7.0/include

尽管如此 - 代码编译。为什么是这样?当cmake不在包含文件的搜索目录中时,如何找到它?

现在,我将解释真正的原因,我在问这个问题。我想在我的另一个项目中使用此代码。因此,我在项目中创建了一个目录foo,并添加了上面的内容。然后我将add_subdirectory(foo)添加到我的主CMakeLists.txt文件中。我打印出包含目录,并获得与以前相同的输出。但是,这一次,没有编译。它给了我错误信息:

fatal error: cuda_runtime.h: No such file or directory

有人可以向我解释为什么它可能是以原始形式进行编译,而不是在合并到我的项目时进行编译?

0 个答案:

没有答案