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

时间:2013-03-23 08:59:09

标签: 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)

谢谢。

1 个答案:

答案 0 :(得分:6)

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()几乎不是一个好主意;这个命令在一般情况下比它的价值更麻烦。首选方案是在必要时提供target_link_libraries()的完整路径。