コンパイラはメッセージ(.../message.h)が見つからないことを伝えています。私のCMakeLists.txtを下記に見てくださいROS C++のカスタムメッセージが見つかりません
cmake_minimum_required(VERSION 2.8.3)
project(my_package)
add_compile_options(-std=c++11)
find_package(catkin REQUIRED
COMPONENTS cv_bridge
image_transport
roscpp
#rospy
sensor_msgs
std_msgs
message_generation
genmsg
external_package
)
find_package(nodelet REQUIRED)
#----
add_message_files(FILES
my_message1.msg
my_message2.msg
)
generate_messages(DEPENDENCIES
std_msgs sensor_msgs
)
catkin_package(
CATKIN_DEPENDS message_runtime std_msgs sensor_msgs roscpp cv_bridge image_transport
)
#****** EXTRA PACKAGES
find_package(LAPACK REQUIRED)
find_package(BLAS REQUIRED)
find_package(PkgConfig REQUIRED)
FIND_PACKAGE(Boost)
find_package(OpenCV)
include_directories(${catkin_INCLUDE_DIRS} ${OpenCV_INCLUDE_DIRS})
SET(MY_FLAG ok) # OR no!!
if(MY_FLAG)
#**** exe files
set(exefiles
file1
file2
)
foreach(file ${exefiles})
add_executable(${file} ${CMAKE_CURRENT_SOURCE_DIR}/pathToExeFiles/${file}.cpp)
endforeach(file)
#****** Lib & link
include_directories(${SRC}/pathToMyLib)
set(MY_LIB
lib1
lib2
libn
)
endif(MY_FLAG)
foreach(file ${exefiles})
target_link_libraries(${file2link}
${MY_LIB}
${MY_LIB}
${MY_LIB}
${catkin_LIBRARIES}
${Boost_LIBRARIES}
${gsl_LIBRARIES} ${LAPACK_LIBRARIES} ${BLAS_LIBRARIES}
${OpenCV_LIBRARIES}
)
add_dependencies(${file} external_package_generate_messages_cpp ${${my_package}_EXPORTED_TARGETS})
endforeach(file)
ADD_SUBDIRECTORY(src)
しかし、以下のトリックでコンパイルすることができます。最初にMy_FLAG
をフラッシングしてコンパイルするように設定しました。次に、私はそれを真に戻し、再びコンパイルします。そうすることで、正常に動作します。しかし、...私は、よりエレガントでプロフェッショナルな/直感的な解決策があるはずです。これまでのところ、この問題の原因を検出することはできません。どのような解決してください?
私は問題が依存関係の順序に関連していると思います...どちらですか?ループ内で実行可能な目標
if(MY_FLAG)
#**** exe files
set(exefiles
file1
file2
)
foreach(file ${exefiles})
add_executable(${file} ${CMAKE_CURRENT_SOURCE_DIR}/pathToExeFiles/${file}.cpp)
add_dependencies(${file} external_package_generate_messages_cpp ${${my_package}_EXPORTED_TARGETS})
endforeach(file)
....
を追加するときは、メッセージ生成依存関係を追加しないようには考え...
まだ同じ問題です。実際には、 '/ devel'と'/build'の両方を削除してから、もう一度コンパイルを試みてください。あるいは、あなたのパッケージを '/ catkin-dev/src /'から移動し、\ buidと\ develを削除してコンパイルしてから、プロジェクトを元に戻してもう一度コンパイルを試みてください。私の場合は、最初のコンパイルでフラグを立てる必要がありました。 – Courier
実際、エラーは自分のexeファイルではないソースに関連しています。実際には、私が設定したフラグは、exeファイルだけでなく、ソースを有効/無効にします。 – Courier