2013-03-23 2 views
1

Я пытаюсь скомпилировать исполняемые файлы в подкаталоге project/model/tests для тестирования и связать файлы модели, которые находятся на project/model. Однако я не могу заставить его работать. Я успешно добавил родительский каталог, но cmake продолжает сообщать мне, что исходный файл не найден для foo.cpp, который находится в родительском каталоге, а bar.cpp, который находится в текущем каталоге, добавлен правильно.Добавить исполняемый файл из родительского каталога cmake

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

Когда файлы, перечисленные в 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(), где это необходимо.

+0

спасибо. Теперь он работает :) И я попытаюсь следовать вашим советам относительно link_directories. –

+1

@LimH. Чтобы дать некоторое обоснование предупреждению 'link_libraries()': см., Например, [этот вопрос] (http://stackoverflow.com/q/15423821/1782465), например, о проблемах с ним. – Angew

Смежные вопросы