从父目录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()几乎从来都不是一个好主意;那个命令通常比它的价值更麻烦。首选的替代方案是在必要时提供target_link_libraries()的完整路径。

最新更新