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

Lim*_* H. 2 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)
Run Code Online (Sandbox Code Playgroud)

谢谢.

Rei*_*ica 7

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

add_executable(runTests ../foo.cpp bar.cpp)
Run Code Online (Sandbox Code Playgroud)

要么:

add_executable(runTests ${MODEL_DIR}/foo.cpp bar.cpp)
Run Code Online (Sandbox Code Playgroud)

旁注:使用它几乎不是一个好主意link_directories(); 这个命令在一般情况下比它的价值更麻烦.首选的替代方案是target_link_libraries()在必要时提供完整的路径.