gpt4 book ai didi

c - 如何使用和构建一个 makefile 来将 scip 链接到 C?

转载 作者:行者123 更新时间:2023-12-05 00:09:40 28 4
gpt4 key购买 nike

我是 C 的新手。我只需要使用 scip 中的一个函数。我制作了一个 make 文件如下:

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

我的cmain.c文件是这样的:

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* */
/* 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;
}

现在在我有这 2 个文件的目录中,我运行 Make 但它不起作用我得到错误:No such file or directory

make: *** No rule to make target `Users/amin/Documents/cProgram/scipoptsuite-6.0.2/scip/make/make.project'.  Stop.

我只是尝试按照某人建议的说明进行操作。如果可以,请你帮助我。我必须做什么?

最佳答案

你做错了。

第一个没有目标的第一个配方是被调用的,所以 all目标应该先行。

第二:不要include那个其他文件并删除除了目录变量和 all 之外的所有内容。目标

您只需添加到 LD_FLAGS 变量,自动规则就会为您链接。除非 scip 项目引入了一堆你需要的变量,否则我不知道你为什么需要在这里包含它的 make 文件信息。

还需要注意的是,您加载到变量中的当前路径有一个不正确的前导 $登录作业,为了链接我们需要确保它到 libscip.so(或 libscip.a)的完整路径

LD_FLAGS+=-L${DIR_containing_libscip.so} -lscip

您可能还需要指向 header /包含文件:

CPP_FLAGS+=-I${DIR_before_includes_of_scip}/include (如果它们被包含为 <scip/foo> 。或者没有 /include 并且如果它们被包含为 <foo> 则进一步上升;这取决于项目风格。大多数项目使用 /include/projname 模式以便将项目有效地保存在它自己的 namespace 中以包含文件以避免冲突。

假设其他一切都已构建并就位并且 scip 没有什么特别之处我需要了解...

关于c - 如何使用和构建一个 makefile 来将 scip 链接到 C?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60217704/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com