cmake - 从父目录 cmake 添加可执行文件

标签 cmake

我正在尝试编译子目录 project/model/tests 中的可执行文件以进行测试,并且需要链接驻留在 project/model 中的模型文件。但是,我无法让它工作。我已成功添加父目录,但 cmake 一直告诉我没有找到父目录中 foo.cpp 的源文件,而当前目录中的 bar.cpp 已正确添加。

cmake_minimum_required(VERSION 2.6)

# get parent directory
get_filename_component(MODEL_DIR ${CMAKE_CURRENT_SOURCE_DIR} PATH)

# Locate GTest
find_package(GTest REQUIRED)
# Add parent directory
include_directories(${GTEST_INCLUDE_DIRS} ${MODEL_DIR})
link_directories(${MODEL_DIR})

# all included directories are printed out correctly
get_property(dirs DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} PROPERTY INCLUDE_DIRECTORIES)
foreach(dir ${dirs})
  message(STATUS "dir='${dir}'")
endforeach()

# foo.cpp, which is in the parent directory is not found 
add_executable(runTests foo.cpp bar.cpp)

target_link_libraries(runTests ${GTEST_LIBRARIES} pthread)

谢谢。

最佳答案

add_executable()add_library() 中列出的文件被指定为相对路径(它们几乎总是如此)时,它们被解释为相对于 CMAKE_CURRENT_SOURCE_DIR 。换句话说,您必须执行以下操作之一:

add_executable(runTests ../foo.cpp bar.cpp)

或者:

add_executable(runTests ${MODEL_DIR}/foo.cpp bar.cpp)

旁注:使用 link_directories() 几乎不是一个好主意;该命令通常比它的值(value)更麻烦。首选的替代方法是在必要时提供到 target_link_libraries() 的完整路径。

关于cmake - 从父目录 cmake 添加可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15585007/

相关文章:

c++ - 结合 CMake option() 与 add_definitions()

c++ - CMake 找不到 boost 库(CGAL、Windows)

cmake - 使用 CMake 在 Qt Creator 4.0 Clang 静态分析器中启用 C++14

cmake - 自定义 cmake FindXXX.cmake 回退到默认位置

c++ - PkgConfig 模块 : INCLUDE_DIRS not listing all directories

c++ - ITK: 在执行 HelloWorld Example 时找不到 ITKCommon-x.xx.dll

c - 尝试制作 RabbitMQ C-master 项目时出错

c++ - 从 CMake 文件生成 Embarcadero 项目文件

c++ - Boost 链接错误 undefined reference to GLIBCXX_3.4

CMake 和 FindProtobuf