我正在尝试编译子目录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)
谢谢。
答案 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()
的完整路径。