Could NOT find Argus Error

I am trying to build a sample application by referring to the CMakeLists.txt which comes along with argus samples. I am currently referring to CMakeLists.txt in “multiSensor” sample as I am trying to do something similar to this sample. My CMakeLists.txt looks like the following :

make_minimum_required(VERSION 2.8)
project( projectname )

set(CMAKE_MODULE_PATH “/home/user/Downloads/argus/cmake” “${CMAKE_MODULE_PATH}”)

find_package(Argus REQUIRED)
find_package(OpenGLES REQUIRED)
find_package(EGL REQUIRED)
find_package( OpenCV REQUIRED )

include_directories({ARGUS_INCLUDE_DIR} {EGL_INCLUDE_DIR} {OPENGLES_INCLUDE_DIR} /home/user/Downloads/samples/utils {OpenCV_INCLUDE_DIRS} )

pkg_check_modules(GSTREAMER REQUIRED gstreamer-1.0)
include_directories(${GSTREAMER_INCLUDE_DIRS})

#set( CMAKE_VERBOSE_MAKEFILE on )
add_subdirectory(ci)

add_compile_options(-std=c++14)
add_executable( projectname main.cpp )
target_link_libraries( projectname /usr/lib/x86_64-linux-gnu/libcuinj64.so {OpenCV_LIBS} {ARGUS_LIBRARIES} {OPENGLES_LIBRARIES} {GSTREAMER_LIBRARIES} ci )

In “ci” subdirectory I have the following files:

  1. multiSensor.cpp
  2. CMakeLists.txt which looks like this :

set (ci_source_files
multiSensor.cpp
)

add_compile_options(-std=c++14)
add_library(ci ${ci_source_files})


When I try to build I get the following error :

CMake Error at /usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:148 (message):
Could NOT find Argus (missing: ARGUS_INCLUDE_DIR)
Call Stack (most recent call first):
/usr/share/cmake-3.5/Modules/FindPackageHandleStandardArgs.cmake:388 (_FPHSA_FAILURE_MESSAGE)
/home/ubuntu/Downloads/argus/cmake/FindArgus.cmake:55 (find_package_handle_standard_args)
CMakeLists.txt:6 (find_package)

– Configuring incomplete, errors occurred!

Kindly help me by advising where I am making a mistake. When I try to build “argus” samples, they get built successfully. I am not able to figure out how this CMakeLists.txt is different from the one in the samples folder.

Thanks.

Hi dumbogeroge

It’s better to copy or build you code in tegra_multimedia_api/ otherwise you need to handle all the path correctly.

Form you error that show the “Could NOT find Argus (missing: ARGUS_INCLUDE_DIR)” that could be the environment not set well.

@ShaneCCC

I am having the same issue. In my case, moving my source code to accomadate this particular FindArgus.cmake is not a solution. I need my project that relies on Argus to be portable since it needs to be usable as a submodule or subproject. I’m trying to make a portable, easy to use, modern, camera library built on top of Argus.

I can’t tell people using my project “hey, install nvidia-l4t-jetson-multimedia-api, copy my project into the samples dir, and build the thing as root”, which is probably what most people are doing. Yes, they could copy the samples, or I could bundle them, but that creates entirely new issues as well. I’d like to just make a debian package and have it pull in yours as a dependency.

Would it be possible, in the next release of nvidia-l45-jetson-multipmedia-api to install libraries to, say $LIBDIR, headers to $PREFIX/include/argus, cmake files to $LIBDIR/cmake/ and so forths so find_package(Argus ...) “just works”? I understand you have documentation saying “download it here”, but that can be changed to sudo apt install nvidia-l45-jetson-multipmedia-api

As it is, this requirement either to move source files into the Argus samples or roll your own FindArgus.cmake is a serious disincentive to using MMAPI on top of it being C++ 03 with a bunch of things re-implemented that are now part of the STL. A camera class, like that in jetson-utils, but without GStreamer as a middleman is what I’m aiming for.

From J4.4 you can easy install it by below command

sudo apt list -a nvidia-l4t-jetson-multimedia-api
sudo apt install nvidia-l4t-jetson-multimedia-api=32.4.3-20200625213407

@ShaneCCC

The problem isn’t installing them. The problem is build systems finding them and the files not being in standard locations. Instead of being in /usr/include/Argus, for example, the headers are actually in two separate subfolders of /usr/src/jetson_multimedia_api/....

Just today, an unknown coworker accidentially modified the headers in place while trying to use the sample code. This lead to compilation errors requiring a reinstall of the samples. IMO there should be:

  • clear instructions to not edit these files in place (rather, to make a copy in your user’s ~/Projects or similar). Otherwise people will run an editor as root and edit headers all of the filesystem.
  • The headers should be in a standard include path a subfolder of $PREFIX/include. If they’re included with the samples, they can be edited accidentally.
  • The .cmake files should be in a CMAKE_MODULES_PATH location so they’re found by build systems like Cmake, Meson, and more. Right now, the way the Find*.cmake files are written, things only build in-place and that leads back to this same problem. Builds are often run as root. Editors are run as root. Editors open headers when ctrl+clicked, and this can easily lead to even system headers being edited accidentally.

Thanks for your suggestion.
Will check with release team if can have it improve.