Hi,

I am trying to include the ipopt code in my ROS project but do not know what to do in my Cmakefile.txt document.

First I start with what I have done so far:

I downloaded the ipopt and third party code, and afterwards compiled it as described here: https://www.coin-or.org/Ipopt/documentation/node10.html

On the other end I am setting up a ROS project where I want to use the ipopt solver in. ROS is using an own build engine (catkin_make) which is however pretty similar to the standard cmake.

In the ipopt/build directory there are examples how to interface ipopt from c++ which is working but using a makefile. However I don't know how to translate into my cmakelist.txt.

My guess would be that I have to add another find_package("Correct package name of ipopt" REQUIRED) as well as target_link_libraries(executableName ${ipopt_LIBRARIES}). But I don#t have a clue how the package name is nor what has to be definer for ipopt_Libraries and how to it.

Every help would appreciated.


FYI: The Makefile of the example looks like this:

# CHANGEME: This should be the name of your executable
EXE = test

# CHANGEME: Here is the name of all object files corresponding to the source
# code that you wrote in order to define the problem statement
OBJS = hs071_main.o \
hs071_nlp.o

# CHANGEME: Additional libraries
ADDLIBS =

# CHANGEME: Additional flags for compilation (e.g., include flags)
ADDINCFLAGS =

##########################################################################
# Usually, you don't have to change anything below. Note that if you #
# change certain compiler options, you might have to recompile Ipopt. #
##########################################################################

# C++ Compiler command
CXX = g++

# C++ Compiler options
CXXFLAGS = -O3 -pipe -DNDEBUG -Wparentheses -Wreturn-type -Wcast-qual -Wall -Wpointer-arith -Wwrite-strings -Wconversion -Wno-unknown-pragmas -Wno-long-long -DIPOPT_BUILD

# additional C++ Compiler options for linking
CXXLINKFLAGS = -Wl,--rpath -Wl,/home/moritz/Downloads/CoinIpopt/build/lib

# Include directories (we use the CYGPATH_W variables to allow compilation with Windows compilers)
INCL = `PKG_CONFIG_PATH=/home/moritz/Downloads/CoinIpopt/build/lib64/pkgconfig:/home/moritz/Downloads/CoinIpopt/build/lib/pkgconfig:/home/moritz/Downloads/CoinIpopt/build/share/pkgconfig:/home/moritz/catkin_ws/devel/lib/pkgconfig:/opt/ros/lunar/lib/pkgconfig:/opt/ros/lunar/lib/x86_64-linux-gnu/pkgconfig pkg-config --cflags ipopt` $(ADDINCFLAGS)
#INCL = -I`$(CYGPATH_W) /home/moritz/Downloads/CoinIpopt/build/include/coin` $(ADDINCFLAGS)

# Linker flags
LIBS = `PKG_CONFIG_PATH=/home/moritz/Downloads/CoinIpopt/build/lib64/pkgconfig:/home/moritz/Downloads/CoinIpopt/build/lib/pkgconfig:/home/moritz/Downloads/CoinIpopt/build/share/pkgconfig:/home/moritz/catkin_ws/devel/lib/pkgconfig:/opt/ros/lunar/lib/pkgconfig:/opt/ros/lunar/lib/x86_64-linux-gnu/pkgconfig pkg-config --libs ipopt`
##LIBS = -link -libpath:`$(CYGPATH_W) /home/moritz/Downloads/CoinIpopt/build/lib` libipopt.lib -llapack -lblas -lm -ldl
#LIBS = -L/home/moritz/Downloads/CoinIpopt/build/lib -lipopt -llapack -lblas -lm -ldl

# The following is necessary under cygwin, if native compilers are used
CYGPATH_W = echo

all: $(EXE)

.SUFFIXES: .cpp .c .o .obj

$(EXE): $(OBJS)
bla=;\
for file in $(OBJS); do bla="$$bla `$(CYGPATH_W) $$file`"; done; \
$(CXX) $(CXXLINKFLAGS) $(CXXFLAGS) -o $@ $$bla $(ADDLIBS) $(LIBS)

clean:
rm -rf $(EXE) $(OBJS) ipopt.out

.cpp.o:
$(CXX) $(CXXFLAGS) $(INCL) -c -o $@ $<


.cpp.obj:
$(CXX) $(CXXFLAGS) $(INCL) -c -o $@ `$(CYGPATH_W) '$<'`