I am very new in C. I just need to use one of the functions in scip. I made a make file as below:
SCIPDIR=$/Users/amin/Documents/cProgram/scipoptsuite-6.0.2/scip
include $(SCIPDIR)/make/make.project
%.o: %.c
$(CC) $(FLAGS) $(OFLAGS) $(BINOFLAGS) $(CFLAGS) -c $<
all: cmain
cmain: cmain.o
$(LINKCXX) cmain.o $(LINKCXXSCIPALL) $(LDFLAGS) $(LINKCXX_o) cmain
my cmain.c file is like this:
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* This file is part of the program and library */
/* SCIP --- Solving Constraint Integer Programs */
/* */
/* Copyright (C) 2002-2019 Konrad-Zuse-Zentrum */
/* fuer Informationstechnik Berlin */
/* */
/* SCIP is distributed under the terms of the ZIB Academic License. */
/* */
/* You should have received a copy of the ZIB Academic License */
/* along with SCIP; see the file COPYING. If not visit scip.zib.de. */
/* */
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/**@file GMI/src/cmain.c
* @brief main file for GMI cut example
* @author Marc Pfetsch
*/
/*--+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0----+----1----+----2*/
#include <scip/scip.h>
#include <scip/scipdefplugins.h>
/** reads parameters */
static
SCIP_RETCODE readParams(
SCIP* scip, /**< SCIP data structure */
const char* filename /**< parameter file name, or NULL */
)
{
if ( filename != NULL )
{
if ( SCIPfileExists(filename) )
{
SCIPinfoMessage(scip, NULL, "reading parameter file <%s> ...\n", filename);
SCIP_CALL( SCIPreadParams(scip, filename) );
}
else
SCIPinfoMessage(scip, NULL, "parameter file <%s> not found - using default parameters.\n", filename);
}
else if ( SCIPfileExists("scipgmi.set") )
{
SCIPinfoMessage(scip, NULL, "reading parameter file <scipgmi.set> ...\n");
SCIP_CALL( SCIPreadParams(scip, "scipgmi.set") );
}
return SCIP_OKAY;
}
/** starts SCIP */
static
SCIP_RETCODE fromCommandLine(
SCIP* scip, /**< SCIP data structure */
const char* filename /**< input file name */
)
{
/********************
* Problem Creation *
********************/
SCIPinfoMessage(scip, NULL, "read problem <%s> ...\n\n", filename);
SCIP_CALL( SCIPreadProb(scip, filename, NULL) );
/*******************
* Problem Solving *
*******************/
/* solve problem */
SCIPinfoMessage(scip, NULL, "solve problem ...\n\n");
SCIP_CALL( SCIPsolve(scip) );
SCIPinfoMessage(scip, NULL, "primal solution:\n");
SCIP_CALL( SCIPprintBestSol(scip, NULL, FALSE) );
/**************
* Statistics *
**************/
SCIPinfoMessage(scip, NULL, "Statistics:\n");
SCIP_CALL( SCIPprintStatistics(scip, NULL) );
return SCIP_OKAY;
}
/** starts user interactive mode */
static
SCIP_RETCODE interactive(
SCIP* scip /**< SCIP data structure */
)
{
SCIP_CALL( SCIPstartInteraction(scip) );
return SCIP_OKAY;
}
/** creates a SCIP instance with default plugins, evaluates command line parameters, runs SCIP appropriately,
* and frees the SCIP instance
*/
static
SCIP_RETCODE runSCIP(
int argc, /**< number of shell parameters */
char** argv /**< array with shell parameters */
)
{
SCIP* scip = NULL;
/*********
* Setup *
*********/
/* initialize SCIP */
SCIP_CALL( SCIPcreate(&scip) );
/* we explicitly enable the use of a debug solution for this main SCIP instance */
SCIPenableDebugSol(scip);
/***********************
* Version information *
***********************/
SCIPprintVersion(scip, NULL);
SCIPinfoMessage(scip, NULL, "\n");
/* include default SCIP plugins */
SCIP_CALL( SCIPincludeDefaultPlugins(scip) );
/**************
* Parameters *
**************/
if ( argc >= 3 )
{
SCIP_CALL( readParams(scip, argv[2]) );
}
else
{
SCIP_CALL( readParams(scip, NULL) );
}
/**************
* Start SCIP *
**************/
if ( argc >= 2 )
{
SCIP_CALL( fromCommandLine(scip, argv[1]) );
}
else
{
SCIPinfoMessage(scip, NULL, "\n");
SCIP_CALL( interactive(scip) );
}
/********************
* Deinitialization *
********************/
SCIP_CALL( SCIPfree(&scip) );
BMScheckEmptyMemory();
return SCIP_OKAY;
}
/** main method starting SCIP */
int main(
int argc, /**< number of arguments from the shell */
char** argv /**< array of shell arguments */
)
{
SCIP_RETCODE retcode;
retcode = runSCIP(argc, argv);
if ( retcode != SCIP_OKAY )
{
SCIPprintError(retcode);
return -1;
}
return 0;
}
Now in the directory that I have these 2 file, I run Make but it doesn't work I get error: No such file or directory
make: *** No rule to make target `Users/amin/Documents/cProgram/scipoptsuite-6.0.2/scip/make/make.project'. Stop.
I just tried to follow a instruction that someone suggested. Please help me if you can. what I have to do?
You are going about this incorrectly.
First without target the first recipe is the one called, so the all
target should go first.
second: don't include
that other file and delete just about everything but the directory variable and the all
target
you simply need to add to the LD_FLAGS
variable and the automatic rules will link for you. unless the scip
project is bringing in a bunch of variables that you need I don't know why you would need to include its make file information here.
Also of note is that the current path you loaded into a variable had an incorrect leading $
sign in the assignment, and for this to link we will need to make sure its full path to libscip.so ( or libscip.a )
i.e. LD_FLAGS+=-L${DIR_containing_libscip.so} -lscip
you might also need to point to the header/include files:
CPP_FLAGS+=-I${DIR_before_includes_of_scip}/include
( if they are included as <scip/foo>
. or without the /include
and going up further if they are to be included just as <foo>
; this depends upon the projects style. Most projects use the /include/projname
pattern so as to keep the project effectively in a namespace of its own for include files to avoid collisions.
that should be it assuming everything else is built and in place and there is nothing particularly special about scip
that I need to know about...