2016-09-06 2 views
2

私はC/C++プロジェクトに取り組んでおり、ビルドにはCMAKE 3.5.2を使用しています。しかし、今はOctave関数を使用するC++ファイルをインクルードする必要があります。このコマンドを使用して、このソースファイルをラインコマンドで直接コンパイルすることができます:mkoctfile --link-stand-alone new_oct_file -o final_libraryCMAKEとMKOCTFILE

私はCMAKEを実行するのに苦労しています、このコマンドを実行します。 add_custom_commandを使用しようとしましたが、動作しませんでした。何か助けてくれますか?

私CMAKEは、私は、次のコマンドを追加しようとしました

cmake_minimum_required(VERSION 2.8) 

project(final_library) 

add_executable(final_library program.c 
./Commons/util.c 
./Tools/xulambs_tool.cpp) 

find_package(Boost REQUIRED) 
include_directories(${Boost_INCLUDE_DIR}) 
include_directories(/usr/include/octave-4.0.0/octave) 

install(TARGETS final-library RUNTIME DESTINATION bin) 

add_subdirectory(Commons) 
add_subdirectory(Tools) 

次のような構造を持っている(それは動作しません):

set(MKOCTFILE "mkoctfile") 
set(OCTARG "--link-stand-alone") 
add_custom_command(TARGET reordering-library 
     PRE_LINK 
     COMMAND ${MKOCTFILE} ARGS ${OCTARG} ./Tools/tool_octave.cpp) 

コンパイル出力は

[ 4%] Linking CXX executable final-library 
g++: error: ./Tools/tool_octave.cpp: No such file or directory 
g++: fatal error: no input files 
compilation terminated. 
CMakeFiles/final-library.dir/build.make:694: recipe for target 'final-library' failed 
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/final-library.dir/all' failed 
Makefile:127: recipe for target 'all' failed 
make[2]: *** [final-library] Error 1 
make[1]: *** [CMakeFiles/final-library.dir/all] Error 2 
make: *** [all] Error 2 
です

ありがとうございます。

+0

この

add_executable(MyEXEのmain.cc):

私の現在のcmakeのファイルには、次が含まれています/v3.0/prop_sf/GENERATED.html助けてください –

答えて

1

preリンクのコマンドは、おそらくソースディレクトリでは実行されないため、スクリプトで使用した相対パスは無効になります。あなたと私はCMakeLists.txtファイルのtarget_link_librariesにliboctinterp.soを追加することによって、それを修正して、私は同じ問題を抱えていた

add_custom_command(TARGET reordering-library 
    PRE_LINK 
    COMMAND ${MKOCTFILE} ARGS ${OCTARG} 
    "${CMAKE_CURRENT_SOURCE_DIR}/Tools/tool_octave.cpp" 
) 
+0

返信ありがとうございます。しかし、私はあなたの提案を試みました。何かが変わった。 – tnas

+2

@tnasこの解決法は基本的には正しいですが、どちらの方法でパスが間違っているかを知る必要があります。 'メッセージ(STATUS" $ {CMAKE_CURRENT_SOURCE_DIR} /Tools/tool_octave.cpp ")でパスを印刷してみてください。 – Antonio

+0

@wasthishelpulの提案はOKです。しかし、私のカスタムコマンドは実行されません。私は 'set(OCTAVETOOL" $ {CMAKE_CURRENT_SOURCE_DIR} /Tools/tool_octave.cpp ")として編集しました。 add_custom_command(OUTPUT tool_octave.outコマンドmkoctfile --link-stand-alone $ {OCTAVETOOL} COMMENT" - オクターブツールのコンパイルアルゴリズム ")。コンソールにコメントが表示されていません。どうして? – tnas

0

:ようなもの、絶対パスを使用してみてください。 https://cmake.org/cmake/help: target_link_libraries(MyEXE liboctave.so liboctinterp.so)