开发者

Project dependency in Eclipse CDT

开发者 https://www.devze.com 2023-04-12 12:17 出处:网络
I\'m using eclipse for the first time. I\'m a seasoned VisualStudio user, so I\'m trying to find similar functionality in eclipse. I have two projects, A a开发者_如何学编程nd B. Project A spits out li

I'm using eclipse for the first time. I'm a seasoned VisualStudio user, so I'm trying to find similar functionality in eclipse. I have two projects, A a开发者_如何学编程nd B. Project A spits out libA.a when it's done compiling. Project B links against libA.a. Here is my problem.

  1. I compile project A then project B, everything is fine.
  2. I make a code change to project A that requires a build of project A.
  3. I try to build project B, but it states that no changes have been detected.

How do I make project B aware of the output of project A?? Currently I'm having to do a clean build of project B for it to re-link against libA.a.

Thanks.

EDIT: In my ProjectB->Path and Symbols->References tab, I have project A checked. This doesn't relink after project A is rebuilt.


Try the below settings:

  1. Go to properties of Main ProjectC/C++ GeneralPaths and SymbolsReferences
  2. Tick all the dependencies.


You go into Project Properties of Project B, select Project References and make it reference (depend) on Project A.

Edit, appears to be a known bug


One can work around this problem by using the touch command.

In Eclipse, as part of C/C++ Build/Settings is the tab 'Build Steps'. In the pre-build steps command line, enter touch filename.

filename is any file in your application. This could be the file with main(). This could be a special file just for this workaround, touchdummy.c, which can be a tiny file, which compiles quickly.

When the application builds, even if you didn't change any sources, the touch command causes make to rebuild the application. If the library was rebuilt, then the application gets rebuilt with the new library.

One can read about how touch affects the date/time of the file here. http://pubs.opengroup.org/onlinepubs/9699919799/utilities/touch.html

Edit: The exact command in Eclipse would be touch ${ProjDirPath}/src/main.c

Edit: This command should work, but it appears that if the 'main' project did not change, the pre-build step is not executed. Also the touch command causes eclipse to prompt to reload the file it touched. A large annoyance.


Eclipse projects depend on each other by virtue of the checkbox in the project's properties (dependent projects?) which is how Eclipse decides which to build. You can set this yourself, but it's usually set when you change your Java build path.


By default at least with QNX C++ projects, it WILL NOT check for changes in other projects. Right click on the project, and expand "check dependencies on/off"->"check user headers only" It seems to work, roughly... It appears to do a makedepends on the code, and adds *.d files to the output folder which are simply depends file that list the header files. Note: these do not appear to get regenerated, and get out of date - I do not know how to regenerate them.


For Project A (library):

Properties>C/C++ Build>Settings>Build Steps>Post-build steps> touch -m ${ProjDirPath}/source/build/build_updated.cpp

You should create folder "source/build" firstly and don't add in that folder any other files.

For Project B:

Properties>Project References> check Project A

Properties>С/С++ General>Paths and Symbols>Source Location>Link Folder>Link to folder in the file system> find and pick "source/build" folder which you created for project A before.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号