2

我正在尝试在子目录中编译可执行文件以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)

谢谢你。

4

1 回答 1

9

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()首选的替代方法是在必要的地方提供完整的路径。

于 2013-03-23T09:24:15.520 回答